我有以下简化代码:朋友模板函数
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