只谈C++11新特性 - 内联命名空间
内联命名空间
背景
假设我们需要为一个库添加版本支持,C++98/03 通常通过命名空间来区分版本:
namespace LibraryV1 {
void printVersion() {
std::cout << "Library Version 1" << std::endl;
}
}
namespace LibraryV2 {
void printVersion() {
std::cout << "Library Version 2" << std::endl;
}
}
int main() {
LibraryV1::printVersion();
LibraryV2::printVersion();
return 0;
}
在这种设计中,每次调用函数时,开发者需要明确指定版本命名空间(例如 LibraryV1
或 LibraryV2
)。如果版本频繁更替,代码的可维护性会受到影响。此外,当用户不关心版本时,也无法直接调用最新版本的函数。
问题总结
- 需要明确指定命名空间,增加了调用的复杂度。
- 无法简单地默认使用最新版本的命名空间。
C++11 的解决方案
为了解决上述问题,C++11 引入了内联命名空间(inline namespace
)。