尽管很明显,这是一个奇怪的问题:
为什么所有模板<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之外,是否有任何迹象表明类似的价值特征会成为类似简化的一部分?
但是,它仍然是开放的,
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] 删除。
我来说两句