Безымянное пространство имен в любом случае бесполезно, так как оно защищает только несколько определений. То, что вы можете сделать, это либо использовать идиому pImpl, как упоминалось в других ответах, либо использовать пространство имен detail
. Отлично работает для Boost:
namespace detail{
class A{
// ...
};
}
class B{
public:
// ...
private
A a_;
};
Любой, кто возится с вещами в пространстве имен detail
, напрашивается на неприятности. Или, может быть, еще больше запутать это
namespace _b_impl_detail{
// ...
};
Любой, кто теперь касается чего-либо внутри, должен быть застрелен в ногу. :)