模板特化简记

默认分类 · 2024-05-16 · 53 人浏览

对于某种需要特殊处理的模板参数, 可以使用模板特化

模板特化是为模板提供特殊版本的一种机制。这个特殊版本仅适用于特定的模板参数。

使用场景

  1. 当某个特定类型需要不同的处理逻辑时。
  2. 优化:为特定类型提供更高效的算法。

注意事项

  1. 特化版本不能独立于原始模板存在。
  2. 不能有多个相同的特化版本。
template<typename T>
class Test {

    void fun(T arg) {
        cout << "fun(T arg)" << endl;
    }

};

template<>
class Test<int> { // 为 Test 类提供了一个 int 特化的版本 当模板参数为int时 会使用这个实现

    void fun(int arg) {
        cout << "fun(int arg)" << endl;
    }

};

模板偏特化是在模板的某些参数已经确定的情况下,为剩余参数提供一个特殊实现。

使用场景

  1. 当只有某几个模板参数需要特殊处理时。
  2. 针对模板参数的某些属性(比如是否为指针、是否为常量等)进行特化。

注意事项

  1. 偏特化只适用于类模板,不适用于函数模板。
  2. 偏特化版本的参数数量必须少于原始模板。
template<typename T1, typename T2>
class Test {
public:
    void fun(T1 arg, T2 arg2) {
        cout << "fun(T arg)" << endl;
    }


};

template<typename T2> // 当第一个参数为 int 时会使用这个偏特化的版本
class Test<int, T2> {
public:
    void fun(int arg) {
        cout << "fun(int arg)" << endl;
    }
};
Theme Jasmine by Kent Liao