2012-03-23 58 views
1

我有下面的代码我重构:C++嵌套命名空间别名可能吗?

namespace Foo 
{ 
    namespace Bar { ...classes... } 
} 

酒吧现在正在进入一个新的顶级命名空间,但I'ld喜欢保持API的兼容性:

namespace Pi { ...classes... } // refactored Foo::Bar 
namespace Foo { namespace Bar = Pi; } // API compatibility 

这并未不起作用,因为它将Foo :: Bar :: Class别名为Foo :: Pi :: Class,但不是Pi :: Class。有没有一种方法(缺少一个宏或类型定义所有Pi分类)来实现我想要的?

回答

2

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

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

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

+0

Doh,那太明显了!谢谢。 – eile 2012-03-23 10:32:35

1

哎呀,你希望它倒过来:

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