c++ 可变参数模版 & 编译期排序
一. 函数模版
关键字template和模板参数列表作为声明与定义的开始。模板参数列表中的类型,可以出现在参数、返回值以及函数体中
定义
C++ template <类型形式参数> //类型形式参数即此格式:<typename 形式参数> 或 <class 形式参数> 返回类型 函数名 (形式参数) { //函数定义体; } |
1. 泛化
C++ #include <iostream> using namespace std; //普通模板 template<class T1,class T2> bool Compare(T1 a, T2 b) { return a == b; } |
2. 全特化
C++ //普通模板 template<class T1,class T2> bool Compare(T1 a, T2 b) { cout << "普通模板" << endl; return a == b; } //函数模板特化 template<> bool Compare(const char* a, const char* b) { cout << "函数模板特化" << endl; return strcmp(a,b) == 0; } |
二. 类模版
定义
C++ template <类型形式参数> class 类名 { //类声明体; }; template <类型形式参数> 返回类型 类名 <类型> :: 成员函数名1(形式参数) { //成员函数定义体; } template <类型形式参数> 返回类型 类名 <类型> :: 函数名N(形式参数) { //成员函数定义体; } |
1. 泛化
C++ template<class T> class Compare { public: bool equal(T a,T b); }; template<class T> bool Compare<T>::equal(T a, T b) { return a == b; } |
C++ template<class T1,class T2> class Test { public: Test(T1 a, T2 b):_a(a),_b(b) { cout << "模板化" << endl; } private: T1 _a; T2 _b; }; |
2. 偏特化
C++ //模板偏特化 template<class T> class Test<int,T> { public: Test(int a, T b) :_a(a), _b(b) { cout << "模板偏特化" << endl; } private: int _a; T _b; }; |
3. 全特化
C++ //模板全特化 template<> class Test<int,int> { public:</ |