欢迎来到程序员中文网!

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

C++ 模板元编程入门:SFINAE 与 enable_if

时间:2026年08月12日 04:46:50 浏览:1

模板特化


template<typename T>
struct TypeInfo {
static const char* name() { return "Unknown"; }
};

template<>
struct TypeInfo<int> {
static const char* name() { return "Integer"; }
};

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 << std::endl;
}

// 仅当 T 是浮点数时启用
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
print(T v) {
std::cout << "Float: " << v << std::endl;
}

print(10); // Integral
print(3.14); // Float

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++ 的高级特性,能在编译期完成大量计算,优化运行时性能。