Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;是否可能使用嵌套命名空间别名?_C++_Namespaces - Fatal编程技术网

C++ C++;是否可能使用嵌套命名空间别名?

C++ C++;是否可能使用嵌套命名空间别名?,c++,namespaces,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:

我正在重构以下代码:

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类)来实现我想要的?哎呀,你想要的是另一种方法:

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

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

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

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

Doh,这太明显了!谢谢