类型特性
<type_traits>库用于判断某个类型是否具有某些特征、改变、比较类型间的特征
常用于函数模板类
结合if constexpr(常量表达式)可以实现条件编译(C++=17)
if constexpr是编译时的条件语句,当表达式条件为真时,该分支代码才会编译,否则舍弃
1 2 3 4 5 6 7 8 9 10 11
| template<typename T> double length(T& t){ if constexpr (std::is_arithmetic_v<T>){ if (t<0) return -t; return t; } else if constexpr (std::is_base_of_v<IMeasurable, T>){ return t.length(); } }
|
结合static_assert
static_assert用于判断编译阶段条件是否为真,若为假则会终止编译,并产生静态断言错误
1 2 3 4 5 6 7 8 9 10 11
| template<typename T> double length(T& t){ static_assert(std::is_arithmetic_v<T>||Std::is_base_of_v<IMeasurable, T>, "使用了不支持计算长度的类型") if constexpr (std::is_arithmetic_v<T>){ if (t<0) return -t; return t; } else if constexpr (std::is_base_of_v<IMeasurable, T>){ return t.length(); } }
|