C++ 实现模板矩阵类
假设我有以下代码:C++ 实现模板矩阵类,c++,templates,C++,Templates,假设我有以下代码: int main(){ class Initializer { public: double operator()(int i, int j) const { return i + j; } }; Matrix<2,5> m1; Matrix<2,5> m2(7); Matrix<1,3> m3(Initializer());
int main(){
class Initializer {
public:
double operator()(int i, int j) const {
return i + j;
}
};
Matrix<2,5> m1;
Matrix<2,5> m2(7);
Matrix<1,3> m3(Initializer());
m1(2,3) = 6;
m2 += m1;
Matrix<2,5> m4 = m1 + m2;
return 0;
}
我应该实现一个通用矩阵,使上面的代码能够编译和工作。
在我当前的实现中,我有以下编译错误,我不确定我的错误在哪里:
template <int R, int C>
class Matrix {
private:
double matrix[R][C];
public:
//C'tor
Matrix(const double& init = 0){
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
matrix[i][j] = init;
}
}
}
Matrix(const Initializer& init) {
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
matrix[i][j] = init(i,j);
}
}
}
//Operators
double& operator()(const int& i, const int& j){
return matrix[i][j];
}
Matrix<R,C>& operator=(const Matrix<R,C>& otherMatrix){
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
matrix[i][j] = otherMatrix.matrix[i][j];
}
}
return *this;
}
Matrix<R,C>& operator+=(const Matrix<R,C>& otherMatrix){
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
matrix[i][j] = otherMatrix.matrix[i][j] + matrix[i][j];
}
}
return *this;
}
Matrix<R,C> operator+(const Matrix<R,C>& otherMatrix) const {
Matrix<R,C> newMatrix;
newMatrix = otherMatrix;
newMatrix += *this;
return newMatrix;
}
};
编译器会警告您有关错误。这一行:
Matrix<1,3> m3(Initializer());
编译器会警告您有关错误。这一行:
Matrix<1,3> m3(Initializer());
这是C++语法的一个怪癖。正如编译器告诉你的,你没有调用Initializer的构造函数,因为你可能要去做什么。是什么阻止了你真正阅读这些诊断?这是C++语法的一个怪癖。正如编译器告诉您的,您并没有像您可能希望的那样调用初始化器的构造函数。是什么阻止您实际读取这些诊断?
Matrix<1,3> m3((Initializer()));