2009-12-23 5 views
5

Возможно ли создать имя пространства имен для класса, скажем, у меня есть пространство имен тестовых модулей с множеством классов, и я хотел, чтобы пространство имен тестов было дружественным классу, чтобы он имел доступ к частным сведениям о реализации.Взаимодействие пространства имен и друга в C++?

ответ

1

Нет, это невозможно в C++. Честно говоря, это плохой дизайн.

+1

Почему вы говорите, что это плохой дизайн? Я думаю, что это возможно сделать и быть полезным. Существует не так много различий между классом и пространством имен, кроме этого указателя. Я не понимаю, почему объявление друга не может работать для пространства имен, что позволяет его функции-члену иметь доступ к деталям реализации класса. Это может позволить функциям, не являющимся членами, связанным с классом, легко получить доступ к внутренним функциям этого класса. В принципе, как вы это сделаете прямо сейчас? Использовать объявление класса, когда пространство имен было бы достаточным и для этого класса? друг каждой функции, которая нуждается в доступе к классу? – n1ckp

+2

Существует множество различий между классами и пространствами имен. – 2010-07-08 07:57:20

+5

Одно отличие состоит в том, что пространство имен не закрыто: вы всегда открываете его и начинаете добавлять к нему вещи. Таким образом, объявление пространства имен, которое было бы полезным для друга, было бы полностью раскрыто. Unleike класс, который заканчивается при закрытии}; –

0

Если вы используете .NET, вы можете взглянуть на InternalsVisibleTo attribute. В любом случае обратите внимание, что это работает для целых сборок, а не для отдельных пространств имен.

Смежные вопросы