[Lang] 类模板
完全特化与偏特化:
特性 |
完全特化(Full Specialization) |
偏特化(Partial Specialization) |
定义 |
为特定类型提供完全的实现 |
为类型参数的部分组合提供定制的实现 |
模板参数 |
必须指定所有的模板参数 |
可以只指定一个或部分模板参数 |
示例 |
template <> class MyClass<int> {...} |
template <typename T2> class MyClass<int, T2> {...} |
#include <iostream>
using namespace std;
// 通用类模板
template <typename T>
class MyClass {
public:
void display() {
cout << "Generic template" << endl;
}
};
// 对 int 类型进行完全特化
template <>
class MyClass<int> {
public:
void display() {
cout << "Specialized for int" << endl;
}
};
int main() {
MyClass<double> obj1;
obj1.display(); // 输出:Generic template
MyClass<int> obj2;
obj2.display(); // 输出:Specialized for int
return 0;
}
#include <iostream>
using namespace std;
// 通用类模板
template <typename T, typename U>
class MyClass {
public:
void display() {
cout << "Generic template" << endl;
}
};
// 对第一个参数为 int 类型进行偏特化
template <typename U>
class MyClass<int, U> {
public:
void display() {
cout << "Partial specialization: T is int" << endl;
}
};
// 对第一个参数为指针类型进行偏特化
template <typename T, typename U>
class MyClass<T*, U> {
public:
void display() {
cout << "Partial specialization: T is pointer" << endl;
}
};
int main() {
MyClass<double, double> obj1;
obj1.display(); // 输出:Generic template
MyClass<int, double> obj2;
obj2.display(); // 输出:Partial specialization: T is int
MyClass<double*, double> obj3;
obj3.display(); // 输出:Partial specialization: T is pointer
return 0;
}