[英]How can I typedef a namespace qualified type?
我想按照#define std::unordered_map my_namespace::my_map
的方式做一些事情。 我为什么要这样做有各种复杂的原因(遗留代码、未来的上游合并、性能等)。 不幸的是, #define
不适用于::
并且typedef
似乎也有问题。 我该怎么做?
Typedef的问题:
typedef std::unordered_map my_namespace::my_map;
给出错误“Typedef 声明符不能被限定”。namespace std { typedef unordered_map my_namespace::my_map };
给出错误“无法在此处定义或重新声明 'my_map',因为命名空间 'std' 没有包含命名空间 'my_namespace'”如何 typedef 命名空间限定类型?
您可以像这样为(在命名空间中的类型)定义 typedef:
typedef some_ns::type alias;
您为这样的类型定义一个(在命名空间中的 typedef):
namespace other_ns {
typedef some_ns::type alias;
}
或者,您可以使用我推荐的相应using
语法:
namespace other_ns {
using alias = some_ns::type;
}
我希望 std::unordered_map 成为 my_namespace::my_map 的别名
您不能将 typedef 添加到std
命名空间中。 这是保留给语言实现的。 这在 C++ 中根本不可能。
namespace std { typedef unordered_map my_namespace::my_map };
您的别名和目标类型顺序错误。 这使得std::my_namespace::my_map
成为std::unordered_map
的别名。 或者,如果您被允许将限定名称放在 typedef 中,但您不是这样。 考虑到您直观地使用 [alias, type] 的顺序, using
语法应该正好适合您。
无论如何,请参阅前面关于std
是保留命名空间的部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.