模板元编程
模板特化:
指的是对某个特定类型或特定类型组合提供模板的定制实现。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #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); }
|
模板偏特化:
通常用于处理模板参数中的某些类型特征(比如说指针类型、数组类型等)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #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); }
|
函数重载与模板特化/偏特化的区别:
- 函数重载:指的是为同一个函数名提供多个不同参数列表的实现。编译器根据传入参数的类型来选择合适的重载版本。函数重载是基于函数参数的类型和数量来选择执行哪个函数,而不涉及模板概念
- 模板特化/偏特化:是针对模板的类型参数进行定制,根据传入的类型来选择对应的模板实例化。