多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 内联命名空间 内联命名空间旨在通过”版本”的概念,来实现库的演化。考虑如下代码: ``` // 文件:V99.h inline namespace V99 { void f(int); // 对V98版本进行改进 void f(double); // 新特性 // … } // 文件:V98.h namespace V98 { void f(int); // V98版本只实现基本功能 // … } // 文件:Mine.h namespace Mine { #include “V99.h” #include “V98.h” } ``` 上述命名空间Mine中同时包含了较新的版本(V99)以及早期的版本(V98),如果你需要显式使用(某个版本的函数),你可以: ``` #include “Mine.h” using namespace Mine; // … V98::f(1); // 早期版本 V99::f(1); // 较新版本 f(1); // 默认版本 ``` 此处的要点在于,被inline修饰的内联命名空间,其内部所包含的所有类/函数/变量等声明,看起来就好像是直接在外围的命名空间中进行声明的一样。(译注:我们注意到,这里的f(1)函数调用相当于显式调用Mine::V99::f(1),使用inline关键字定义的内联名字空间成为默认名字空间。 (就像内联函数一样,内联的名字空间被嵌入到它的外围名字空间,成为外围名字空间的一部分。 ) inline描述符是一个非常“静态(static)”及面向实现的设施,它由库的设计者选择在(某个版本namespace之前)放置,且一旦选定则库的所有使用者只能被动接受(译注:即命名空间的作者可以通过放置inline描述符来表示当前最新的命名空间是哪个,所以对用户来说,这个选择是“静态”的:用户无权判断哪个命名空间是最新的)。因此,Mine命名空间的用户没法选择说:“我想要默认的命名空间为V98,而非V99”。 参考: * Standard 7.3.1 Namespace definition [7]-[9]. (翻译:dabaitu)