C ++嵌套命名空间别名可能吗?

时间:2012-03-23 10:09:25

标签: c++ namespaces

我有以下代码我正在重构:

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级别)来实现我想要的目标?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,这应该做你需要的。这意味着Foo::Bar中的任何查找都会在::Pi中找到名称。

namespace Pi {}
namespace Foo { namespace Bar { using namespace Pi; } }

显然,这不会保留二进制兼容性。

答案 1 :(得分:1)

哎呀,你想要反过来说:

namespace Foo {
  namespace Bar {
     using namespace Pi;
  }
}