template<class A_Type>
class Calc
{
public:
A_Type add(A_Type a, A_Type b)
{
return a+b;
}
A_Type multiply(A_Type a, A_Type b);
};
template<class A_Type>
A_Type Calc<A_Type>::multiply(A_Type a, A_Type b)
{
return a*b;
} 如果templated classes 和 templated functions用相同的类型参数的话,且在class内定义模板函数的话, 则可以使用相同的类型参数, 如果在class外定义函数体的话,则要再写一次template,而且限定函数名的class 名后要加上类型参数,名字可以不用和定义class时的相同。 template<class retType, class argType>
retType cast(argType a)
{
return (retType)a;
} 如果按上面的顺序声明类型参数的话,则调用该函数时,可以cast<double>(10); 定义templated classes里的templated functions template<class T> class Tw {
public:
template<class S>
S tt(S a);
};
template<class T>
template<class S>
S Tw<T>::tt(S a)
{
return a;
} 在class外定义函数体时,要写两次template,一次是针对class的,一次是针对function的。