C++中的模板元编程
模板元编程
模板特化: 指的是对某个特定类型或特定类型组合提供模板的定制实现。
示例:
#include<iostream>
using namespace std;
template <typename T>
void func(T t) {
cout << "Generic template: " << t << endl;
}
// 完全特化模板
template <>
void func<int>(int t) {
cout << "Specialized template for int: " << t << endl;
}
int main() {
func(10); // 使用特化模板
func(3.14); // 使用通用模板
}
模板偏特化: 通常用于处理模板参数中的某些类型特征(比如说指针类型、数组类型等)
#include<iostrea>
using namespace std;
template <typename T>
void func(T t) {
cout << "Generic template: " << t << endl;
}
// 偏特化
template <typename T>
void func(T* t) {
cout << "Template specialized for pointer type: " << *t << endl;
}
int main() {
int a = 10;
int* p = &a;
func(a); // 使用通用模板
func(p); // 使用偏特化模板
}
函数重载与模板特化/偏特化的区别:
- 函数重载:指的是为同一个函数名提供多个不同参数列表的实现。编译器根据传入参数的类型来选择合适的重载版本。函数重载是基于函数参数的类型和数量来选择执行哪个函数,而不涉及模板概念
- 模板特化/偏特化:是针对模板的类型参数进行定制,根据传入的类型来选择对应的模板实例化。