我正在重构以下代码:
namespace Foo
{
namespace Bar { ...classes... }
}
Bar 现在正在移动到一个新的顶级命名空间,但我想保持 API 兼容性:
namespace Pi { ...classes... } // refactored Foo::Bar
namespace Foo { namespace Bar = Pi; } // API compatibility
这不起作用,因为它将 Foo::Bar::Class 别名为 Foo::Pi::Class,而不是 Pi::Class。有没有办法(缺少宏或对所有 Pi 进行类型定义)来实现我想要的?
最佳答案
如果我理解正确,这应该可以满足您的需求。这意味着在 Foo::Bar
中的任何查找都会在 ::Pi
中找到名称。
namespace Pi {}
namespace Foo { namespace Bar { using namespace Pi; } }
显然,这不会保持二进制兼容性。
关于C++ 嵌套命名空间别名可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837327/