我只定义了一个模板矩阵类matrix <class T>
,并且我想重载operator*
,以矩阵和另一个类中的元素作为参数,例如int
,{{1 }}。重载的函数可以与double
,matrix<int>
,matrix<double>
一起正常工作,但是当我尝试多个matrix<complex<int>>
和1
matrix<complex<double>>
的定义:
operator*
template <typename _T, typename _U>
auto operator* (const _T& t, const matrix<_U>& m)->matrix<decltype(_T(0)*_U(0))> {
matrix<decltype(_T(0)*_U(0))> r(m);
for (int i = 0; i < r.row; ++i)
for (int j = 0; j < r.col; ++j)
r[i][j] *= t;
return r;
}
代码:
Main
我对此感到疯狂。 matrix<complex<double>> F(4, 4, {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2});
cout << 1*F; //error: E0349 no operator "*" matches these operands
// binary '*': no global operator found which takes type 'matrix<std::complex<double>>' (or there is no acceptable conversion)
//work fine with matrix<complex<int>>
怎么了?任何答案将不胜感激。