繁体   English   中英

如何 typedef 命名空间限定类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM