代码之家  ›  专栏  ›  技术社区  ›  Steve314

我应该做些什么来帮助管理链接器名称空间污染的内部使用类吗?

c++
  •  0
  • Steve314  · 技术社区  · 14 年前

    在一个复杂的库或框架中,显然有一些时候需要纯粹的内部类来实现更高级别的功能。

    通常,这些内部构件与内部构件的工作方式紧密耦合在一起,因此让用户可以使用它们是没有意义的——他们所能做的就是试图篡改您的私有内部构件。

    同时,其中一些内容相当大——很容易就大到需要它们自己的头和体源文件。

    如果在单个文件中有一个小类,则可以将其包装在匿名命名空间中,并且行为良好的编译器不会在对象文件中包含与该类相关的符号。完全避免了名称空间污染的问题。

    但是,一旦类被单独编译,这就不起作用了——我们需要将其他内部实现代码链接到此对象文件,因此它必须包含相关的符号。

    由于头文件仅供内部使用,因此它可能与所有正文源文件位于同一文件夹中,而不是单独存在 include 保存头文件的文件夹用户将 #include .

    不过,这些符号在对象库中仍然可见。

    这是一个真正的问题,还是一个想象中的问题?我应该做些什么来管理这种形式的名称空间污染?

    1 回复  |  直到 14 年前
        1
  •  2
  •   sbi    14 年前

    我通常把这样的标识符放在 details 命名空间:

    namespace some_component {
      namespace details {
        class helper { ... };
      }
    }
    

    some_component::details::helper 显然是一个实现细节。