- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一种矩阵库,所以我使用运算符重载为矩阵提供了一个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/
我正在尝试切换(某种)命令。 if 'Who' in line.split()[:3]: Who(line) elif 'Where' in line.split()[:3]: W
基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 0,而不仅仅是负数),但我不知道它在哪个方向行进,所以我不知道是增加阻力还是减去阻力。 (如果一个项目向右移动,它有正向力,向左移动,负向
我有以下表格 CREATE TABLE Foos ( [Id] INT IDENTITY, -- Other fields ) CREATE TABLE Boos ( [Id]
我正在运行一个非常简单的程序 static void Main(string[] args) { Console.WriteLine(Get4S());
PHP $total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0
我是一名优秀的程序员,十分优秀!