模板與泛型編程(二)

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的。
相關文章
相關標籤/搜索