[Lang] 类模板

[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;
}
posted @ 2024-12-01 12:28  yaoguyuan  阅读(4)  评论(0编辑  收藏  举报