【发布时间】:2017-08-24 08:08:31
【问题描述】:
我正在编写一种矩阵库,所以我给我的矩阵一个operator +,使用运算符重载。它看起来像这样。
friend matrix<T, size_x, size_y> operator + (const matrix<T, size_x, size_y> & Input_1, const matrix<T, size_x, size_y> & Input_2){
matrix<T, size_x, size_y> Output;
for (int i=0; i<size_x; i++){
for (int j=0; j<size_y; j++){
Output.value[i][j]=Input_1.value[i][j]+Input_2.value[i][j];
}
}
return Output;
}
据我测试,它有效。现在我也喜欢添加 -、/、* 运算符,它们的工作方式相同。当然我可以使用复制、替换和粘贴。但这不利于可读性和可维护性。有没有更聪明的解决方案,也许还有一个概念,因为我不知道谷歌这个概念的名称?我刚刚发现,如何重载单个运算符。
【问题讨论】:
-
您需要一个嵌套 for 循环,并为 +、-、* 和 / 中的每一个提供回调函数(尽管矩阵乘法听起来与 + 和 - 不同的嵌套循环)。但是你仍然需要分离重载。考虑到代码行数、编译时间和运行时间优化(如果有的话),我强烈建议复制粘贴和修改。
-
我会更加小心 * 和 / '工作相同',因为没有人会期待。矩阵乘法不是这样工作的。
-
@Ken Cheung。谢谢你。你给了我一个新的研究点。问候马库斯
-
至少在我的矩阵库中我只是复制意大利面。调试更容易,维护更清晰。它也是一个 std::array
,所以像上面这样的函数你可能会丢失内部循环。 -
@UKMonkey。实际上,它不是矩阵。它只是一种矩阵。它是一个 pde-grid 或离散化的二维函数。
标签: c++ operator-overloading operators