模板类不但可以定义类型,还可以定义普通参数类型。在定义类型时,还可以使用缺省参数。
虽然模板可以通用,但有时需要进行特别类型的特别对待,这样就需要使用特例模板。下面的模板template< >
class CTestVector< short, 2 >
,就是特例模板。
// atl005.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <process.h>
#include <iostream>
//
//学习C++模板(5)。
//蔡军生 2006/12/05
//
//
//模板类带简单参数,并使用缺省参数。
//蔡军生2006/12/05
//
template< typename T, int nMax = 5 >
class CTestVector
{
public:
CTestVector(T vec)
{
for (int i = 0; i < nMax; i++)
{
m_vec[i] = vec;
}
}
void print(void)
{
for (int i = 0; i < nMax; i++)
{
std::cout<< m_vec[i] << std::endl;
}
}
protected:
private:
T m_vec[nMax];
};
//特例模板。
template< >
class CTestVector< short, 2 >
{
public:
CTestVector(short vec)
{
for (int i = 0; i < 2; i++)
{
m_vec[i] = vec;
}
}
void print(void)
{
std::cout<< "CTestVector< short, 2 >" << std::endl;
for (int i = 0; i < 2; i++)
{
std::cout<< m_vec[i] << std::endl;
}
}
protected:
private:
short m_vec[2];
};
//
//程序入口点。
//
int _tmain(int argc, _TCHAR* argv[])
{
//使用特例模板。
CTestVector< short,2 > testShortA(2);
testShortA.print();
//不使用特例模板。
CTestVector< short,1 > testShortB(1);
testShortB.print();
//int实例,使用缺省参数。
CTestVector< int > testInt(10);
testInt.print();
//float实例。
CTestVector< float, 3 > testFloat( 3.14159f );
testFloat.print();
//double实例。
double dA = 1.55233f;
CTestVector< double, 6 > testDouble(dA);
testDouble.print();
//
//暂停.
//
system("pause");
return 0;
}
输出结果:
CTestVector< short, 2 >
2
2
1
10
10
10
10
10
3.14159
3.14159
3.14159
1.55233
1.55233
1.55233
1.55233
1.55233
1.55233
请按任意键继续. . .