【发布时间】:2016-06-26 22:26:46
【问题描述】:
我有以下模板类:
template <class T>
class Matrix {
public:
Matrix(size_t rows, size_t columns, const T elements = 0);
// scalar multiplication
Matrix<T> operator*(const T& rhs){
Matrix<T> result(rows, columns);
for(size_t index = 0; index < rows * columns; ++index){
result.elements[index] = elements[index] * rhs;
}
return result;
}
Matrix <T> operator*(const T& lhs, const Matrix<T>& rhs);
const size_t rows;
const size_t columns;
private:
std::vector<T> elements;
};
以及 operator* 的以下实现:
// scalar multiplication
template <class T>
Matrix<T> Matrix<T>::operator*(const T& lhs, const Matrix<T>& rhs){
Matrix<T> result(rhs.rows, rhs.columns);
for(size_t index = 0; index < rhs.rows * rhs.columns; ++index){
result.elements[index] = elements[index] * lhs;
}
return result;
}
当我尝试编译 clang 时说:error: overloaded 'operator*' must be a unary or binary operator (has 3 parameters)|
我不太明白,我缺少什么。一般来说,模板类在重载运算符时给我带来了困难,我不知道为什么。这里有一些关于这个主题的帖子,我尝试了一些代码的变体,但都没有奏效。
【问题讨论】:
-
作为成员函数,它隐式地将
this作为第一个参数,但您想再添加 2 个。假设您有Matrix a,b,c;,您的运营商将被称为a.operator*(b,c),这有意义吗?没有;)
标签: c++ class templates overloading operator-keyword