【发布时间】:2018-07-02 18:04:13
【问题描述】:
如果函数的模板参数包括但不限于类的模板参数,我想知道如何使类的函数成为朋友并在类外部定义函数。
例如我有以下模板类和模板友元函数:
template<int N> class Matrix;
template<typename T, int N> Matrix<N> operator*(const Matrix<N> &m1, const T &m2);
// class definition
template<int N>
class Matrix{
template<typename T>
friend Matrix<N> operator* (const Matrix<N> &m1, const T &m2);
};
// friend function definition
template<typename T, int N> Matrix<N> operator*(const Matrix<N> &m1, const T &m2)
{
return m1; // just as an example
}
如果我编译:
Matrix<3> m;
m * 1.0;
我会收到以下链接器错误:
test.cc:(.text+0x1c7): undefined reference to `Matrix<3> operator*<double>(Matrix<3> const&, double const&)'
collect2: error: ld returned 1 exit status
【问题讨论】:
标签: c++ c++11 templates declaration friend