所谓Type trait提供一种用来处理type属性的办法。它是一个模板,可在编译器根据一或多个模板实参产出一个type或value
示例如下:
针对整数类型的弹性重载
假设有一个函数foo(),对于整数类型和浮点数类型的实参,它该有不同的实现。通常的做法是将它重载,使它拥有针对整数类型和针对浮点数类型两个版本:
void foo(short);
void foo(int);
void foo(float);
void foo(double);
void foo(long double);
...
这样的重复工作不仅令人厌烦,还带来一个问题:只要面对新类型或用户自定义的类型,它就束手无策了
有了type trait
,你可以这样写:
template<typename T>
void foo_impl(T val, true_type);
template<typename T>
void foo_impl(T val, false_type);
template<typename T>
void foo(T val)