C++中模板的實例化指函式模板(類模板)生成模板函式(模板類)的過程。對於函式模板而言,模板實例化之後,會生成一個真正的函式。而類模板經過實例化之後,只是完成了類的定義,模板類的成員函式需要到調用時才會被初始化。模板的實例化分為隱式實例化和顯示實例化。
基本介紹
- 中文名:模板實例化
- 外文名:template instantiation
- 領域:計算機編程
- 程式語言:C++
1.隱式實例化
1.1模板隱式實例化的定義
1.2函式模板隱式實例化
#include <iostream>using namespace std;template <typename T> void func(T t){ cout<<t<<endl;} void invoke(void (*p)(int)){ int num=10; p(num);}int main(){ invoke(func);}
1.3類模板隱式實例化
#include <iostream>using namespace std;template<typename T>class A{ T num;public: A(){ num=T(6.6); } void print(){ cout<<"A'num:"<<num<<endl; }}; int main(){ A<int> a; //顯示模板實參的隱式實例化 a.print();}
2. 顯示實例化
2.1模板顯示實例化的定義
2.2函式模板的顯示實例化
template函式返回類型 函式模板名<實際類型列表>(函式參數列表)
template void func<int>(const int&);
2.3類模板的顯示實例化
template class 類模板名<實際類型列表>
template class theclass<int>;
3.函式模板調用方式
3.1隱式模板實參調用
template <typename T> void func(T t){ cout<<t<<endl;} func(5);//隱式模板實參調用
3.2顯示模板實參調用
#include <iostream>using namespace std;template <typename T> T Max(const T& t1,const T& t2){ return (t1>t2)?t1:t2;} int main(){ int i=5; //cout<<Max(i,'a')<<endl; //無法通過編譯 cout<<Max<int>(i,'a')<<endl; //顯示調用,通過編譯}