参考:http://www.cplusplus.com/doc/tutorial/templates/
// 模版.cpp : Defines the entry point for the console application.
//以下代码可直接编译测试
#include "stdafx.h"
namespace tp1
{
//--------------1--------------
//模版声名,参数可以不声明
template<typename T>T GetaAdd(T,T);
//定义上面模版,模版参数名字可以不同
template<typename a>a GetaAdd(a a1,a a2)
{
return a1+a2;
}
//---------------1---------
//---------------2-----------
//模版声明及定义
template<typename T>T GetaMul(T& a,T& b)
{
return a-b;
}
//---------------2-----------
}
namespace tp2
{
template <class myType>
myType GetMax (myType a, myType b) {
return (a>b?a:b);
}
}
//模版重载
/************************************************************************/
/* 原型
template <class T> class mycontainer { ... };
template <> class mycontainer <char> { ... };
*/
/************************************************************************/
namespace tp3
{
template <class T>
class mycontainer {
T element;
public:
mycontainer (T arg) {element=arg;}
T increase () {return ++element;}
};
// 重载:
template <>
class mycontainer <char> {
char element;
public:
mycontainer (char arg) {element=arg;}
char uppercase ()
{
if ((element>='a')&&(element<='z'))
element+='A'-'a';
return element;
}
};
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = tp1::GetaAdd(2,3);
int i=2,j=3;
int c = tp1::GetaMul(i,j);
//---------------------------------------------
int i1=5, j1=6, k;
long l=10, m=5, n;
//------方法1
k=tp2::GetMax<int>(i1,j1);
n=tp2::GetMax<long>(l,m);
//------方法2
k=tp2::GetMax(i1,j1);
n=tp2::GetMax(l,m);
//------------------------------------------------
tp3::mycontainer<int> myint (7);
tp3::mycontainer<char> mychar ('j');
int ret = 0;
return 0;
}
//类模版
namespace tp4
{
//---------类模版1---------
//类声明 1
template <class T>
class mypair {
T values [2];
public:
mypair (T first, T second)//构造函数
{
values[0]=first; values[1]=second;
}
};
//****定义实现
mypair<int> myobject (115, 36);
mypair<double> myfloats (3.0, 2.18);
//------------类模版2---------
//类声明 2
template <class T>
class mypair2 {
T a, b;
public:
mypair2 (T first, T second)//构造函数
{
a=first;
b=second;
}
//++++函数声明
T getmax ();
};
//++++函数定义2
template <class T>
T mypair2<T>::getmax ()
{
T retval;
retval = a>b? a : b;
return retval;
}
//****定义实现
mypair2 <int> myobject2 (100, 75);
int max = myobject2.getmax();
//------------------------类模版3--------------
//带默认参数
template <class T=char, int N=10>
class mysequence {
//代码
};
mysequence<> myseq;//默认实现
mysequence<char,10> myseq2;
}