【问题标题】:Does GCC STL have a trait that gets the primitive type from typedef aliases?GCC STL 是否具有从 typedef 别名获取原始类型的特征?
【发布时间】:2020-11-28 21:41:42
【问题描述】:

我找不到从 typedef 别名返回原始类型的元函数,就像在那个可能的例子中一样:

typedef int ivar;
typedef ivar signIvar;

...
// true
std::cout << std::is_same< int, std::get_primitive<signIvar>::type >::value;

它可能存在,但我找不到它。原则上实现是可能的,但我只能让它在编译时间上变得昂贵。

【问题讨论】:

  • 问题为什么说gcc stl?
  • 我的意思是 GCC 的 STL 实现
  • 是的,我明白了,但你为什么要指定? gcc stl 实现应该提供标准所说的内容。
  • 恕我直言,非标准扩展是可能的,就像在 clibs 中一样。
  • C++ 标准库和 STL 是不同的东西。 STL很久以前就消失了。阅读 STL 标签描述。

标签: c++ templates stl typedef typetraits


【解决方案1】:

从概念上讲,没有“从 typedef 别名中获取原始类型”这样的东西。

类型的别名只是同一类型的名称。因此,您可以这样做:

std::cout << std::is_same_v<int, signIvar>; // output: 1

【讨论】:

  • 问题在于类型转换,我做了一堆显式模板专业化。并且编译器无法匹配原始类型及其实例化别名。
  • 那么请在问题中用minimal reproducible example显示该问题
  • @HolyFoxManDude 恰恰相反,编译器无法避免匹配类型及其别名。 some_template&lt;int&gt;some_template&lt;signIvar&gt; 是模板的同一个实例化。
  • @eerorika 是的。最有可能的问题是我正在使用常规类型检查固定类型(int32_t)。它在 x86 之外并不完全正确,因此,转换需要是显式的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 2010-09-23
相关资源
最近更新 更多