如何匹配模板中的模板友元函数 class
How to match template friend function in a template class
我有一个模板 class,它声明了一个本身具有模板参数的友元函数。代码如下所示:
template <class T>
class C;
template <class T, class U>
void func(C<T>& t);
template <class T>
class C
{
template <class U>
friend void func<T, U>(C<T>& t);
private:
template <class U>
void f()
{
}
};
template <class T, class U>
void func(C<T>& t)
{
t.f<U>();
}
但是当我尝试调用 func
时,我在 friend
行遇到编译错误:
'func': no matching overloaded function found
如何与 C<T>
交 func<T, U>
朋友?
关键问题是你声明的朋友,和你之前提供的声明不一样。第一个需要两个模板参数,但您定义的第二个(朋友)只接受一个。一旦解决,一切正常:
template <class T>
class C;
template <class U, class T>
void func(C<T>& t);
template <class T>
class C
{
template <class U, class TT>
friend void func(C<TT>& t);
private:
template <class U>
void f()
{
}
};
template <class U, class T>
void func(C<T>& t)
{
t.template f<U>();
}
int main() {
C<int> c;
func<bool>(c);
}
请注意,我调高了 U
和 T
,因为我假设您可能想要推导 T
并明确指定 U
。
我有一个模板 class,它声明了一个本身具有模板参数的友元函数。代码如下所示:
template <class T>
class C;
template <class T, class U>
void func(C<T>& t);
template <class T>
class C
{
template <class U>
friend void func<T, U>(C<T>& t);
private:
template <class U>
void f()
{
}
};
template <class T, class U>
void func(C<T>& t)
{
t.f<U>();
}
但是当我尝试调用 func
时,我在 friend
行遇到编译错误:
'func': no matching overloaded function found
如何与 C<T>
交 func<T, U>
朋友?
关键问题是你声明的朋友,和你之前提供的声明不一样。第一个需要两个模板参数,但您定义的第二个(朋友)只接受一个。一旦解决,一切正常:
template <class T>
class C;
template <class U, class T>
void func(C<T>& t);
template <class T>
class C
{
template <class U, class TT>
friend void func(C<TT>& t);
private:
template <class U>
void f()
{
}
};
template <class U, class T>
void func(C<T>& t)
{
t.template f<U>();
}
int main() {
C<int> c;
func<bool>(c);
}
请注意,我调高了 U
和 T
,因为我假设您可能想要推导 T
并明确指定 U
。