目錄
1. C++類模版
格式:
template <類型參數表>
class 類模板名{
成員函數和成員變量
};
A. 類型參數表
class類塑參數1, class類型參數2, ...
B. 成員函數和成員變量在內外部的寫法
template <類型參數表>
返回值類型 類模板名<類型參數名列表>::成員函數名(參數表)
{
...
}
C. 用類模板定義對象的寫法如下:
類模板名<真實類型參數表> 對象名(構造函數實際參數表);
如果類模板有無參構造函數,那麼也可以使用如下寫法:
類模板名 <真實類型參數表> 對象名;
#include <iostream>
#include <string>
using namespace std;
template <class T>
class MyT
{
private:
T val;
public:
MyT(T t) :val(t) {};
~MyT() {};
void Print()
{
cout << "val:" << val << endl;
};
};
//測試用例
void main()
{
MyT<int> myInt(1);
myInt.Print();
MyT<string> myStr("hello world");
myStr.Print();
}
2. C++類模版函數
template <class T>
class A
{
public:
template <class T2>
void Func(T2 t) { cout << t; } //成員函數模板
};
//用例
void main()
{
A<int> a;
a.Func('K'); //成員函數模板Func被實例化
a.Func("hello");
}
3. 模版參數
//1. 固定模版參數
template <typename T>
class CFixT
{
};
CFixT<int> fixT0;
CFixT<string> fixT1;
//2. 可變模版參數
template <typename ... Types>
class CChgT
{
};
CChgT<> chgT0;
CChgT<int> chgT1;
CChgT<int, string> chgT2;
//3. 避免出現0個可變參數
template <typename T, typename ... Types>
class COneFixChg
{
};
COneFixChg<int> OneFixChgT0;
COneFixChg<int, string> OneFixChg1;
COneFixChg<int, string, double> OneFixChgT2;