(我假設Abrahams/Dimov example的知識,在這個問題上。)函數模板專業化和亞伯拉罕/ Dimov擁有例如
假設存在這樣喜歡這個,你不能修改標題一些第三方的代碼:
template<class T> void f(T); // (1) base template 1
template<class T> void f(T *); // (2) base template 2
template<> void f<>(int *); // (3) specialization of (2)
的問題是:
如果我一直在考慮上面,是聲明,是有可能我現在專注的基本模板1,其中的情況下T = int *
(例如)?
或者僅僅聲明基本模板2意味着基本模板1不能再專用(至少對於指針)?
即使你可以,該專業化是否可以被調用?似乎基本模板2將總是「贏」,如果用指針調用f。 – Mat 2013-02-09 07:51:38
@Mat:據我所知,不是來自當前的翻譯部門,但它可以從另一個翻譯部門調用,我認爲,對嗎?假設另一個翻譯單元有一個非重載聲明#1和相應的專業化。 – Mehrdad 2013-02-09 07:55:14
在範圍內沒有基礎模板2的TU? (不知道我明白了。)還要小心ODR違規行爲。 – Mat 2013-02-09 07:56:36