为什么type_traits是类&不是功能

时间:2015-12-20 08:59:54

标签: c++ typetraits

我最近一直关注type_traits&我们想知道为什么它们被实现为class templates而将它们实现为functions可能更明显&有一个更简单的语法。

我想说的是这种语法: -

int x = 5;
std::cout << is_same<int>(x);

更具说服力&amp;比实际更清洁,即: -

int x = 5;
std::cout << is_same <int, decltype(x)>::value;

这只是好奇心的一个例子。我只想了解标准化委员会的理念,而不是class方法而不是function方法。

1 个答案:

答案 0 :(得分:8)

  1. Versality 即可。大多数类型特征都有X::value布尔常量和X::type类型别名,可用于标记调度。
  2. 部分专业化的能力。您不能对函数进行部分特化,只能进行完全特化和重载。在存在特殊化和重载的情况下,很容易调用错误的函数。
  3. 编译时评估。大多数类型特征是在以前的千年中发明的,当constexpr函数不可用时。即使在constexpr函数中,也不能将值作为参数传递,因为它可能会阻止编译时评估。
  4. 您总是有类型,但有时它就是您所拥有的。创建一个不能一直工作的函数会适得其反,所以无论如何我们都无法依赖模板参数推导。