C++ 模板元编程基础:特化、SFINAE 与 enable_if
模板元编程在编译期执行计算,提升运行时性能。
1. 模板特化
template<typename T>
struct TypeInfo { static const char* name() { return 'Unknown'; } };
template<>
struct TypeInfo<int> { static const char* name() { return 'Integer'; } };2. SFINAE(Substitution Failure Is Not An Error)
编译器在模板替换失败时不会报错,而是尝试其他重载。
// 仅当 T 是整数时启用
template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
print(T v) {
std::cout << 'Integral: ' << v << '\n';
}
// 仅当 T 是浮点数时启用
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
print(T v) {
std::cout << 'Float: ' << v << '\n';
}3. C++17 的 if constexpr
template<typename T>
void show(T v) {
if constexpr (std::is_integral_v<T>) {
std::cout << 'int: ' << v;
} else if constexpr (std::is_floating_point_v<T>) {
std::cout << 'float: ' << v;
}
}模板元编程是 C++ 高级特性,能显著提升性能。
