类模板具体化,类模板的具体化分为部分具体化和全部具体化两种
template<typename T1, typename T2> class Test { public: Test() { cout << "T1 and T2" << endl; } }; // 部分具体化 template<typename T1> class Test<T1, int> { public: Test() { cout << "T1 and int" << endl; } }; // 部分具体化 template<typename T2> class Test<long, T2> { public: Test() { cout << "long and T2" << endl; } }; // 全部具体化 template<> class Test<long, int> { public: Test() { cout << "long and int" << endl; } }; // 分别创建上面四个类 Test<char, char>(); Test<char, int>(); Test<long, char>(); Test<long, int>();
成员模板
成员模板简单说就是模板中的模板
class Base1 { }; class Base2 { }; class Test1 : public Base1 { }; class Test2 : public Base2 { }; template<typename T1, typename T2> class Pair { public: T1 t1; T2 t2; Pair(T1 t1, T2 t2) : t1(t1), t2(t2) { } // 类模板中的成员模板 template<typename U1, typename U2> Pair(const Pair<U1, U2>& pair) : t1(pair.t1), t2(pair.t2){ } }; Pair<Base1*, Base2*>(Pair<Test1*, Test2*>(new Test1, new Test2));
如果未特殊说明,以上测试均是在win10 vs2017 64bit编译器下进行的
总结
以上所述是小编给大家介绍的C++ 泛型编程,希望对大家有所帮助!