1
我在創建非模板類的成員模板函數的特殊實例時遇到了麻煩。我有,例如,A類與模板成員函數F:某些類型的模板函數的C++特例,它是一個模板類本身
class A
{public:
template <class T> int F (T arg) const;
....
}
,並希望有B型此模板函數F的一個特例:
class B;
...
template <> void A::F (B arg) const //GOOD!
和它完美的作品,直到似乎B本身就是一個模板!
此代碼
template <class T> class B ...
...
template <> void A::F (B<T> arg) const //error, T undeclared
以及
template <class T> class B ...
...
template <class T> template <> void A::F (B<T> arg) const //error, too many templates
給出編譯錯誤。
第二個問題是,如何聲明這個特殊的實例(或整個模板實例)是類B的朋友函數? (即使B不是模板,也不起作用)。
class B
{friend template <> void A::F (B arg) const // error
// as well as
template <> friend void A::F (B arg) const // error
}
有沒有一種方法可以用我要去的方式編寫代碼或者它是不可能的?
對不起,我怕我沒有趕上語法,你可以在A類的成員F的例子表明 A級 {模板 INT F(T ARG)const的; } 請成爲B班的朋友! –
Nick
2010-01-10 16:38:36
哦,我明白了,你不能將友誼賦予成員函數。你可以把它授予這個班,但是:'朋友班A;'。我已經爲答案添加了一個示例。 – avakar 2010-01-10 16:47:29
非常感謝,我認爲是這樣,也許即使我之前聽說過它,宣佈朋友A級也不是問題,所以我不在乎。但是,我不能創造部分專業化是非常可悲的。 – Nick 2010-01-10 16:55:34