C++ 模板编程进阶:特化、偏特化与 SFINAE
模板是 C++ 泛型编程的核心,高级技巧可大幅提升代码灵活性。
1. 模板特化(全特化)
template<typename T>
struct TypeInfo { static const char* name() { return "Unknown"; } };
template<>
struct TypeInfo<int> { static const char* name() { return "Integer"; } };2. 偏特化(部分特化)
// 对指针类型特化
template<typename T>
struct TypeInfo<T*> { static const char* name() { return "Pointer"; } };3. SFINAE(替换失败不是错误)
利用 std::enable_if 根据类型条件启用或禁用函数。
template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
print(T v) {
std::cout << "Integral: " << v << std::endl;
}
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
print(T v) {
std::cout << "Float: " << v << std::endl;
}4. 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++ 的高级特性,适合库开发。
