gpt4 book ai didi

c++ - 运算符重载 C++, (+, -, *,/etc.) 有没有比复制、替换和粘贴更聪明的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:27 24 4
gpt4 key购买 nike

我正在编写一种矩阵库,所以我使用运算符重载为矩阵提供了一个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;
}

据我测试,它是有效的。现在我也想添加 -、/、* 运算符,它们的工作原理都是一样的。当然我可以使用复制、替换和粘贴。但这不利于可读性和可维护性。有没有更聪明的解决方案,也许还有一个概念,因为我不知道用谷歌搜索它的概念名称?我刚发现如何重载单个运算符。

最佳答案

您可以使用 template和一个 rvalue reference && (调用时创建的临时 lambda expression 需要):

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;
}

然后

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);
}

关于c++ - 运算符重载 C++, (+, -, *,/etc.) 有没有比复制、替换和粘贴更聪明的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45856237/

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