在c ++中定义类名称空间中的类有什么好处?

时间:2015-03-14 11:02:16

标签: c++ namespaces

我有一个x.cpp文件,其中我看到在命名空间内定义了一个类。所以,我的问题是:

1)在命名空间内定义类有什么好处? 2)其次,我还看到在同一个x.cpp文件中从命名空间定义的结构。那么,在同一个x.cpp文件中这样做有什么好处呢?

x.h看起来如下:

 class x{
 private:
  struct abc;
  };

x.cpp看起来像:

 namespace{
     class{};
 }
 struct x:abc{};

1 个答案:

答案 0 :(得分:4)

匿名命名空间只能在其编译单元中访问。这意味着没有其他cpp可以访问x.cpp的匿名命名空间中的任何内容。

namespace {
     class abc {};  // this class is visible only within x.cpp 
                    // no other separately compiled cpp can't see it. 
 }
struct x : abc{};   // the struct (class) x inherits from abc.      

优点是它使实现真正私密。对abc的唯一访问权限来自x,其继承自abc

这使得它与私有成员甚至私有继承真正不同。由于您不能绝对不在其他编译单元中引用abc,因此您只能使用x的前向声明。因此,x注定要在x.cpp之外保持不完整的类型。

事实上,这种方法是实现完美PIMPL的第一步。这个interesting article演示了使用匿名命名空间实现PIMPL习语的完整示例。