我有这样一个全局函数:
namespace X
{
namespace Y
{
template <R, ...T>
R foo(T&&... args)
{
R r(args...);
return r;
}
}
}
然后在另一个班级A
中,我想将此函数foo
声明为A
的朋友。所以我做了:
class A
{
template <R, ...T>
friend R X::Y::foo(T&&... args);
A(int x, int y){}
};
现在,当我调用X::Y::foo<A>(4, 5)
时,它无法编译错误,foo无法访问A
的私有构造函数。我无法理解错误,如何正确声明foo
为A
的朋友?
提前致谢。
答案 0 :(得分:2)
在修复了模板参数和参数包的语法问题后,这似乎有效:
namespace X
{
namespace Y
{
template <typename R, typename ...T>
R foo(T&&... args)
{
R r(args...);
return r;
}
}
}
class A
{
template <typename R, typename ...T>
friend R X::Y::foo(T&&... args);
A(int x, int y){}
};
int main()
{
X::Y::foo<A>(1, 2);
}
以上是上述代码编译的live example。