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行所示)。