whn*_*whn 5 c++ namespaces c++14
我在 C++ 中遇到了当前的问题:
我有一个给定外部库的命名空间。我不喜欢这个外部命名空间的名称,所以我做了以下操作:
namespace mynamespace = othernamespace;
Run Code Online (Sandbox Code Playgroud)
如果我想说执行以下操作,这很好用:
mynamespace::foo(...);
Run Code Online (Sandbox Code Playgroud)
但我发现我需要一个特殊的函数来将找到的othernamespace值转换为在外部库中找到的值。我通过以下方式定义了一个函数:
Y xToY(mynamespace::X x);
Run Code Online (Sandbox Code Playgroud)
我意识到我只想在 的上下文中使用这个函数,但mynamespace我仍然不喜欢使用命名空间名称,othernamespace所以我认为很简单,我会执行以下操作:
namespace mynamespace = othernamespace;
namespace mynamespace{
Y xToY(mynamespace::X x);
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下编译器错误,告诉我这无法完成:
myheader.h:13:11: error: namespace alias 'mynamespace' not allowed here, assuming 'othernamespace'
Run Code Online (Sandbox Code Playgroud)
因此它不会编译。注意我目前使用的是 c++14。我想知道我是否可以使用命名空间的别名来扩展这个命名空间othernamespace。
没有。不幸的是这是不可能的。来自 [namespace.def] 的规则明确排除别名:
在命名空间定义中,标识符是命名空间的名称。如果标识符在查找时(3.4.1)引用的是在命名空间定义出现的命名空间中引入的命名空间名称 (但不是命名空间别名),或者在该命名空间的内联命名空间集,命名空间定义扩展了先前声明的命名空间。否则,标识符将作为名称空间名称引入到出现命名名称空间定义的声明性区域中。
您不能通过别名扩展命名空间,只能通过原始命名空间名称扩展命名空间。