gpt4 book ai didi

c++ - 是否可以制作接受多种数据类型的 C++ 函数?

转载 作者:行者123 更新时间:2023-11-27 23:47:04 25 4
gpt4 key购买 nike

我正在编写一个必须支持多个操作的 Matrix 类。其中之一是将一个矩阵乘以另一个矩阵,或与矩阵数据相同类型的标量。另一个是实现 *= 运算符。

当前代码(工作):

template <typename T>
Matrix<T>& Matrix<T>::operator*=(const Matrix<T> &rhs) {
Matrix<T> lhs = *this;
*this = lhs*rhs;
return *this;
}

template <typename T>
Matrix<T>& Matrix<T>::operator*=(T num) {
Matrix<T> lhs = *this;
*this = lhs * num;
return *this;
}
template<typename T>
const Matrix<T> Matrix<T>::operator*(T scalar) const {
Matrix<T> result(rows, cols);
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
//std::cout << "adding elements at [" << i << "][" << j << "]" << std::endl;
result[i][j] = this->data[i][j] * scalar;
}
}
return result;
}

template<typename T>
const Matrix<T> Matrix<T>::operator*(const Matrix<T> &b) const {
Matrix<T> a = *this;
if(a.cols != b.rows)
throw DimensionMismatchException();
int rows = a.rows;
int cols = b.cols;
Matrix<T> result(rows, cols);
for(int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
for(int k = 0; k < a.cols; k++)
result[i][j] += a[i][k]*b[k][j];
return result;
}

我的问题:是否可以实现 *= 运算符而无需 2 个不同的函数?我也很好奇是否也可以用 * 运算符完成类似的事情,因为这些方法中的代码由于矩阵乘法的性质而非常不同,所以事情会更优雅一些。

最佳答案

函数应该做一件事并且把它做好。如果您发现在同一个函数中有两个截然不同的实现,那么如果拆分函数,您的代码很可能会更易于维护且更易于阅读。

这里的拆分很好。很明显 operator* 有两种主要情况需要应对。一个乘以标量,另一个乘以矩阵。

关于c++ - 是否可以制作接受多种数据类型的 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49740351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com