非型別的模板引數
阿新 • • 發佈:2018-10-31
對於模板引數一般會有class 或者typeneme型別,但也可以是已知型別,即非型別的模板引數,但是非型別的類模板引數不能是double/float/自定義型別
#include<iostream> #include<stdlib.h> #include<string> #include<time.h> #include<assert.h> using namespace std; //非型別的類模板引數 //template<class T, double max_size > //錯誤,模板引數為double型別 //template<class T, size_t max_size > template<class T, size_t max_size = 10> //預設非型別模板引數 class Seqlist { public: Seqlist(); //類內宣告 private: T _array[max_size]; size_t _size; }; //template<class T, size_t max_size = 10> template<class T, double max_size> Seqlist<T, max_size>::Seqlist() //類外定義建構函式,需要是型別 { _size = 0; } //非型別的模板函式引數 //template<class T,double value=4.1> //錯誤,double和float不可作為非型別的類模板引數 template<class T, long value = 4> //可以是long/int或其他型別 //template<class T,string value="pick"> T add(const T& a) { return a + value; } int main() { //Seqlist<int> q1; Seqlist<int, 5> q2; double a = 12.1; cout << add(a) << endl; system("pause"); return 0; }
函式模板的模板引數是double型別:
類模板的模板引數是double型別:
float型別:
自定義型別: