2010-10-29 115 views
0

我發現模板方法可能被重載,我可以在模板類上做同樣的事情嗎?如果2個模板類匹配一個模板類實例,我們可以在構造函數中使用參數類型來推斷使用哪一個。是否有可能重載模板類?

template <typename T> 
class A{ 
    A(T){} 
}; 

template <typename T> 
class A{ 
    A(T*){} 
}; 

int main(){ 
    A<int*> a((int*)0); 
    A<int> a((int*)0); 
    return 0; 
} 
+2

就這樣你知道:反引號語法是用於內聯代碼的。如果要格式化代碼塊,請將每行縮進四個空格。 http://daringfireball.net/projects/markdown/ – 2010-10-29 03:08:37

+0

模板類可以是專門的(部分或完全) – Anycorn 2010-10-29 03:09:07

+0

@Jonathan Sterling,謝謝你的提示。我如何縮進4個空格的塊代碼?看來整個塊的標籤不起作用。有沒有捷徑可以做到這一點?或者我需要逐行插入空格? – Thomson 2010-10-29 03:14:53

回答

5

不,這是不允許的。相反,類模板可以是專業化的(包括部分專業化)。這幾乎達到了超載的效果(僅針對函數)

請注意,模板參數無法從構造函數參數中推導出來。

template<class T> struct X{ 
    void f(){} 
}; 

template<class T> struct X<T*>{ 
    void f(){} 
}; 

int main(){ 
    X<int> x; 
    x.f();   // calls X<T>::f 

    X<int *> xs; 
    xs.f();   // calls X<T*>::f 
} 
相關問題