如果我在模板类声明里面定义朋友模板函数,如下,就可以编译了。
#include <iostream>
template <typename T>
class X {
public:
X(int i) : n(i) {}
private:
T n;
template <typename U>
friend void doStuff(const X<T>& x, const U& u)
{
std::cout << (x.n + u) << std::endl;
}
};
int main()
{
X<int> x(1);
doStuff(x, 3);
return 0;
}
但是,如果我将定义doStuff()
移出类声明,就在声明类之后X<>
,如下所示,它无法编译。
template <typename U>
template <typename T>
void doStuff(const X<T>& x, const U& u)
{
std::cout << (x.n + u) << std::endl;
}
以下代码也没有。
template <typename U, typename T>
void doStuff(const X<T>& x, const U& u)
{
std::cout << (x.n + u) << std::endl;
}
那么我应该如何doStuff()
在类声明之外定义模板函数呢?
提前致谢。