Mar*_*kus 4 c++ operator-overloading operators
我正在编写一种矩阵库,所以我operator +使用运算符重载给了我的矩阵a .它看起来像这样.
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;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,正如我测试它,它的工作原理.现在我也想添加 - ,/,*运算符,它们都是一样的.当然我可以使用复制,替换和粘贴.但这对可读性和可维护性不利.是否有一个更智能的解决方案,也许是一个概念,因为我不知道谷歌的概念名称吗?我刚刚发现,如何使单个运算符超载.
Jar*_*d42 11
您可以使用模板和右值引用&&(在调用时创建的临时lambda表达式所需):
template <typename F>
friend matrix<T, size_x, size_y> doBinOp(F&& f,
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] = f(Input_1.value[i][j], Input_2.value[i][j]);
}
}
return Output;
}
Run Code Online (Sandbox Code Playgroud)
然后
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)
{
return doBinOp([](auto l, auto r) { return l + r; }, Input_1, Input_2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |