欢迎来到程序员中文网!

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

C++ 模板编程进阶:特化、偏特化与 SFINAE

时间:2026年08月12日 05:42:24 浏览:0

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++ 的高级特性,适合库开发。