C++之模板类模板函数
生活随笔
收集整理的這篇文章主要介紹了
C++之模板类模板函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模板類
模板類的定義使用template<typename T>或template<class T>,將具有相同功能的代碼合并,增加代碼的簡潔性和易讀性。例如在計算凸包的例子中,傳入點的類型可以是自定義的Point,也可以是pcl::point之類。
例如在頭文件中的定義如下:
template<typename T> class POLYGON { public:POLYGON(); public:void convhull(std::vector<T> &input, std::vector<T> &result); };模板函數
如模板類中的convhull函數就是模板函數,模板函數的輸入為各種類型的點,將計算后的凸包存在result中。convhull的模板參數只有T,也可以為該函數增加其它的模板參數。例如,增加參數T1:
template<typename T> class POLYGON { public:POLYGON();template<typename T1> void test(T1 a); public:void convhull(std::vector<T> &input, std::vector<T> &result); };以上為模板類和模板函數是如何定義的,接下來將介紹它們是如何初始化的。模板函數有隱式實例化和顯示實例化,但模板類只有顯式實例化。
1、隱式實例化
? 在模板函數的初始化在類的內部,即函數的實現在類的內部,例如實現pointFromVeh2grd,在調用隱式實例化的模板函數時,系統會自動適配模板參數T。
template<typename T> class POLYGON { public:POLYGON();T pointFromVeh2grd(const T &ptVeh, const double &vehX, const double &vehY, const float &vehYaw){return ptGrd;}template<typename T1> void test(T1 a); public:void convhull(std::vector<T> &input, std::vector<T> &result); };2、顯示初始化
模板函數的初始化在類的外部,模板類實例化AXIS_CONVERT<int>,這說明AXIS_CONVERT類只接受int類型的輸入,如果輸入類型,編譯器會報錯。模板函數實例化template void AXIS_CONVERT::test<double>(double);同樣test函數只接受double類型的輸入。
//在源文件中進行顯式初始化及實現//顯式初始化 template class AXIS_CONVERT<int>; template void AXIS_CONVERT::test<double>(double);//函數功能實現 template<typename T> template<typename T1> void AXIS_CONVERT<T>::test(T a) {std::cout<<a<<std::endl;}總結
以上是生活随笔為你收集整理的C++之模板类模板函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS总结-Runtime篇之用途及面试
- 下一篇: C#转换Excel表格中的科学计数法数字