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的。