为什么type_traits是类而不是函数

Why type_traits are classes & not functions

本文关键字:函数 为什么 traits type      更新时间:2023-10-16

我最近一直在研究type_traits;想知道为什么它们被实现为CCD_ 2,而将它们实现为CCD_;具有更简单的语法。

我想说的是这个语法:-

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

更有说服力&比实际的更干净

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

这只是出于好奇。我只是想知道标准化委员会喜欢class方法而不是function方法的理念。

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