假设我有
template<class T>
void f(T t);
和
template<class T>
class X
{
};
如果我只想f<T>
成为 的朋友X<T>
,我声明:
template<class T>
class X
{
friend void f<>(T t);
};
现在假设 f 声明如下:
template<class T, class U>
void f(T t, U u);
我想声明以下内容:对于任何类型U
f<T, U>
都是X<T>
. 所以我想f<int, char>
成为的朋友X<int>
,但我不想f<char, int>
成为朋友X<int>
。这可能吗?以下似乎无法编译
template<class T>
class X
{
template <class U>
friend void f<>(T t, U, u);
};
请注意,我知道如何将整个模板声明为朋友。