[英]How to match template friend function in a template 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':找不到匹配的重载函数
如何用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
明确指定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.