Lig*_*ica 20
号
@LightnessRacesinOrbit的答案由标准的以下引用解释
7.3命名空间[basic.namespace]
1命名空间是可选命名的声明性区域.命名空间的名称可用于访问在该命名空间中声明的实体; 也就是命名空间的成员.与其他声明性区域不同,命名空间的定义可以分为一个或多个转换单元的几个部分.
由于翻译单元的数量是一个开放集,因此可以添加名称空间成员资格.
但是,正如@Galik所建议的那样,通过仅使用静态成员函数编写结构或类,您可以不完美地模拟封闭的命名空间
struct closed_namespace {
static void fun() { /* bla */ }
};
Run Code Online (Sandbox Code Playgroud)
将命名空间转换为struct可能不是100%的插件.例如,普通名称查找可能行为相同,但您始终需要限定函数,以便ADL离开窗口.
但是调用代码几乎是一样的(即使用::访问器)
closed_namespace::fun();
Run Code Online (Sandbox Code Playgroud)
你还可以使用typedef缩短长名称,使用using类似于从左到右命名空间别名的C++ 11 -syntax
using cn = closed_namespace;
Run Code Online (Sandbox Code Playgroud)
另一方面,使用指令和声明不会延续.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           237 次  |  
        
|   最近记录:  |