2009-12-23 10 views
5

¿Es posible hacer un espacio de nombre amigo de una clase, decir que tengo un espacio de nombres de prueba de unidades con muchas clases y quería que el espacio de nombres de prueba fuera amigo de una clase para que tuviera acceso a detalles privados de implementación.Interacción de espacio de nombres y amigo en C++?

Respuesta

1

No, esto no es posible en C++. Francamente, huele a pobre diseño.

+1

¿Por qué dices que es un mal diseño? Creo que posiblemente podría hacerse y ser útil. No hay mucha diferencia entre una clase y un espacio de nombres, excepto este puntero. No veo por qué la declaración de amigo no podría funcionar para un espacio de nombres, lo que permite que su función miembro pueda acceder a los detalles de implementación de una clase. Esto podría permitir que las funciones no miembro relacionadas con una clase tengan fácil acceso a las partes internas de esa clase. Básicamente, ¿cómo lo harías ahora? ¿Usa una declaración de clase cuando un espacio de nombre sería suficiente y amigo de esa clase? amigo de todas las funciones que necesitan acceso a la clase? – n1ckp

+2

Hay muchas, muchas diferencias entre clases y espacios de nombres. –

+5

Una diferencia es que un espacio de nombres no está cerrado: siempre lo abres y comienzas a agregar cosas a él. Por lo tanto, declarar un espacio de nombre para un amigo sería abrirse totalmente. Desatar una clase, que finaliza al cierre}; –

0

Si está utilizando .NET, es posible que desee echar un vistazo a InternalsVisibleTo attribute. De todos modos, tenga en cuenta que esto funciona para ensamblajes completos, no para espacios de nombres únicos.

Cuestiones relacionadas