Я читаю Scott Meyrse C++, и теперь я нахожусь в разделе об инкапсуляции. Он сказал, что нет возможности инкапсулировать участников данных, если они не объявят их частными. И это понятно.Namespace-private members in C++
Но так как я пришел из Java имею свои package-private
метод и член, я заинтересован, если C++ позволяет нам делать некоторые трюки, чтобы объявить некоторые в пространстве имен, так что она недоступна вне пространства имен. Пространство имен - личное или что-то в этом роде. Я думал, что следующий код с помощью анонимного-имен будет хорошо:
namespace A {
namespace { //anonymous namespace within the namespace
int a;
}
void foo(){ std::cout << a << std::endl; }
}
int main()
{
A::a = 2;
A::foo();
}
Но он работал отлично: http://coliru.stacked-crooked.com/a/b4690b9bb28dad29
Общим соглашением является наличие вложенного пространства имен с именем 'internal'. Он по-прежнему доступен - любой может написать 'A :: internal :: a', но он явно сигнализирует кому-либо за пределами, что они собираются полагаться на внутренние детали реализации, на свой страх и риск. Безымянное пространство имен делает что-то совершенно другое - оно содержит определения, которые ограничены этой единицей перевода (также как исходный файл). –
@IgorTandetnik Действительно, звучит очень рассудком. Большое спасибо за совет. – stella