欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

C++ 模板元编程基础:特化、SFINAE 与 enable_if

时间:2026年08月12日 05:34:29 浏览:1

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++ 高级特性,能显著提升性能。