为什么必须使用'typename'和':: type'前缀/后缀来调用所有type_traits类?

雅各布·里德尔(Jakob Riedle)

尽管很明显,这是一个奇怪的问题:

为什么所有模板<type_traits>都必须使用typenname::type前缀/后缀来调用

原因当然是没有像C ++ 0x那样的模板化typedef using,它允许以下操作:

template<typename T>
using remove_ref = typename std::remove_reference<T>::type;

remove_ref<int&> foo = 4;

因此,这个问题不是关于当前为何采用这种方式的问题,而是关于在将来的C ++标准中是否将简化这种行为的更多信息

类似的特性可能会带来类似的改进std::is_pointer<T>::value-我已经在C ++ 14/17的地平线上已经看到了模板常量,可以使用like这样的特性std::is_pointer<T>

注意:就我所知,此简化不涉及与即将发布的C ++标准有关的任何已发布项目。在这种情况下,对这个问题没有真正的是/否答案,并且该线程可以充当pro / con列表,无论在任何新版本的C ++中是否都可能更改此列表。

编辑:

感谢@Drew_Dormann和@erenon正确地指出,已经_t在所有类型特征模板中添加了完全可以做到这一点的版本。

但是,它仍然是开放的,std::is_pointer除了std::is_pointer<T>()-Version之外,是否有任何迹象表明类似的价值特征会成为类似简化的一部分?

TC

但是,它仍然是开放的,std::is_pointer除了std::is_pointer<T>()-Version之外,是否有任何迹象表明类似的价值特征会成为类似简化的一部分?

是的。当前在DTS投票中的第一个库基础知识TS添加了许多_v变量模板。例如:

template <class T> constexpr bool is_pointer_v
  = is_pointer<T>::value;

像在TS中添加的所有内容一样,它在std::experimental名称空间中。它们已在libstdc ++和libc ++的主干版本中实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

@type和@typedef有什么区别?

来自分类Dev

TypeRef和Type有什么区别?

来自分类Dev

STL代码typedef typename value_type,size_type等。这些如何工作?

来自分类Dev

如何使用type_traits或模板功能专门化来巩固模板方法

来自分类Dev

Media Type的后缀和子类型可以互换使用吗?

来自分类Dev

如何找出template <typename type>是什么类型?

来自分类Dev

为什么@RelatedToVia具有可选的type和elementClass参数?

来自分类Dev

为什么同时使用前缀和后缀是非法的?

来自分类Dev

asp:ObjectDataSource中的TypeName =“ API.MyClass + Clients”和TypeName =“ API.MyClass.Clients”有什么区别?

来自分类Dev

“ #define TYPE(x)typename decltype(x)”是个坏主意吗?

来自分类Dev

使用type_traits检查constness

来自分类Dev

使用Effort和TypeName属性进行测试

来自分类Dev

为什么type_traits是类而不是函数

来自分类Dev

为什么Type.resolveClass和import不能使用相同的类名?

来自分类Dev

namedtuple return和它的typename参数之间有什么区别?

来自分类Dev

为什么要使用结构实现type_traits

来自分类Dev

类语法和type()有什么区别?

来自分类Dev

如何在C ++ 17中使用type_traits检测具有特定名称和签名的函数(NOT类成员)的存在

来自分类Dev

在结构和枚举上带有或不带有typename的Typedef,每种类型的优点/缺点是什么,最佳实践是什么?

来自分类Dev

typename std :: remove_reference <T>和constexpr typename std :: remove_reference <T>有什么区别?

来自分类Dev

模板<typename>模板<typename>是做什么的?

来自分类Dev

如何使用type_traits仅在特定类型上添加模板类的成员函数。C ++

来自分类Dev

STL代码typedef typename value_type,size_type等。这些如何工作?

来自分类Dev

如何使用type_traits或模板功能专门化来巩固模板方法

来自分类Dev

为什么同时使用前缀和后缀是非法的?

来自分类Dev

asp:ObjectDataSource中的TypeName =“ API.MyClass + Clients”和TypeName =“ API.MyClass.Clients”有什么区别?

来自分类Dev

'typename List :: node_type&elem_node = elem-> * list.node;'的语法含义是什么?

来自分类Dev

使用template <typename>

来自分类Dev

UWP:如何获取程序集中所有页面对象的列表和相应的 TypeName

Related 相关文章

  1. 1

    @type和@typedef有什么区别?

  2. 2

    TypeRef和Type有什么区别?

  3. 3

    STL代码typedef typename value_type,size_type等。这些如何工作?

  4. 4

    如何使用type_traits或模板功能专门化来巩固模板方法

  5. 5

    Media Type的后缀和子类型可以互换使用吗?

  6. 6

    如何找出template <typename type>是什么类型?

  7. 7

    为什么@RelatedToVia具有可选的type和elementClass参数?

  8. 8

    为什么同时使用前缀和后缀是非法的?

  9. 9

    asp:ObjectDataSource中的TypeName =“ API.MyClass + Clients”和TypeName =“ API.MyClass.Clients”有什么区别?

  10. 10

    “ #define TYPE(x)typename decltype(x)”是个坏主意吗?

  11. 11

    使用type_traits检查constness

  12. 12

    使用Effort和TypeName属性进行测试

  13. 13

    为什么type_traits是类而不是函数

  14. 14

    为什么Type.resolveClass和import不能使用相同的类名?

  15. 15

    namedtuple return和它的typename参数之间有什么区别?

  16. 16

    为什么要使用结构实现type_traits

  17. 17

    类语法和type()有什么区别?

  18. 18

    如何在C ++ 17中使用type_traits检测具有特定名称和签名的函数(NOT类成员)的存在

  19. 19

    在结构和枚举上带有或不带有typename的Typedef,每种类型的优点/缺点是什么,最佳实践是什么?

  20. 20

    typename std :: remove_reference <T>和constexpr typename std :: remove_reference <T>有什么区别?

  21. 21

    模板<typename>模板<typename>是做什么的?

  22. 22

    如何使用type_traits仅在特定类型上添加模板类的成员函数。C ++

  23. 23

    STL代码typedef typename value_type,size_type等。这些如何工作?

  24. 24

    如何使用type_traits或模板功能专门化来巩固模板方法

  25. 25

    为什么同时使用前缀和后缀是非法的?

  26. 26

    asp:ObjectDataSource中的TypeName =“ API.MyClass + Clients”和TypeName =“ API.MyClass.Clients”有什么区别?

  27. 27

    'typename List :: node_type&elem_node = elem-> * list.node;'的语法含义是什么?

  28. 28

    使用template <typename>

  29. 29

    UWP:如何获取程序集中所有页面对象的列表和相应的 TypeName

热门标签

归档