1. 程式人生 > >非型別的模板引數

非型別的模板引數

對於模板引數一般會有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型別:
在這裡插入圖片描述
自定義型別:
在這裡插入圖片描述