C++ inline namespace

参考:http://blog.aaronballman.com/2011/07/inline-namespaces/
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/namespace_association.htm

提供了一种“默认名字空间”的机制。当不指定具体的名字空间时,将按默认名字空间对待。

 1 #include <stdio.h>
 2 
 3 namespace Outer{
 4 
 5     inline 
 6     namespace V2{
 7         void foo(){
 8             printf("V2::foo()\n");
 9         }
10     }
11     
12     namespace V1{
13         void foo(){
14             printf("V1::foo()\n");
15         }
16     }
17 }
18 
19 int main(){
20 
21     Outer::V1::foo();
22     Outer::V2::foo();
23     Outer::foo();
24 }

第23行,调用Outer中的默认名字空间V2的foo(). 
用途:新版本的升级测试。foo升级到V2版本。如果升级不理想,可以把V1改成inline,V2改成非inline。这将就降级回旧版的foo函数。
从前是用宏#ifdef V2  ...#endif之类的技术。使用inline namespace带来一个明显的好处是:可以同时使用新版本的foo和旧版本的foo(正如第21行所示)。

 

posted @ 2018-04-03 11:47  thomas76  阅读(480)  评论(0编辑  收藏  举报