我type_traits
最近一直在研究并且想知道为什么它们被实现,class templates
而实现它们functions
可能更明显并且具有更简单的语法.
我想说的是这种语法: -
int x = 5; std::cout << is_same(x);
比实际的更有说服力和清洁,即: -
int x = 5; std::cout << is_same::value;
这只是好奇心的一个例子.我只想知道标准化委员会的理念,而class
不是function
方法.
多才多艺.大多数类型特征都有X::value
布尔常量和X::type
类型别名,可用于标记分派.
能够部分专业化.您不能对函数进行部分特化,只能进行完全特化和重载.在存在特化和重载的情况下,很容易调用错误的函数.
编译时评估.大多数类型特征是在以前的千年中发明的,当时constexpr
功能不可用.即使在constexpr函数中,也不能将值作为参数传递,因为它可能会阻止编译时评估.
你总是有类型,但有时你只有它.创建一个不能一直工作的函数会适得其反,所以无论如何我们都无法依赖模板参数推导.