template<class A_Type> web
class Calcide
{
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的。