我有以下簡化代碼:朋友模板函數
template <class T>
class A
{
public:
template <class U>
static U foo(T* p)
{
p;
return U();
}
};
class B
{
/*template <class T>
template <class U>
friend U A<T>::foo<U>(T*);*/
friend B A<B>::foo<B>(B*);
B()
{}
public:
};
...
A<B>::foo<B>(nullptr);
而且它工作得很好。但是,我沒有能夠做到的事情評論說:
/*template <class T>
template <class U>
friend U A<T>::foo<U>(T*);*/
我不知道語法我應該用什麼做它的工作原理。所以我需要將我的朋友聲明概括爲所有可能的類型。我已經嘗試了不少的語法變體,但沒有成功。有人可以指出我應該寫什麼,而不是使用我的評論代碼來使其有效嗎? 謝謝!
'template'? –
Vlad
2012-03-18 13:42:30
我嘗試了幾種不同編譯器的變體,似乎沒有任何工作(並且生成的錯誤消息沒有幫助)。 – Vlad 2012-03-18 14:45:29
我試過你的代碼在叮噹2.8和g ++ 4.5.2的Linux上,並且都很滿意你的代碼... – 2012-03-18 18:27:59