作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我的矩阵类,我想在+ - / * %
的range-v3 View 上进行某种类型的运算符重载(可能使用表达式模板)。
例如,如果我想查看两列之和的 View ,我想写
col_1 + col_2
rv::zip_with([](auto c1, auto c2) {return c1 + c2;}, col_1, col_2);
//simple example
//what I want to write
auto rangeview = col_1 + col_2;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto c2) {
return c1 + c2;
}, col_1, col_2);
//itermediate
//what I want to write
auto rangeview = col_1 + col_2 + col_3;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto c2, auto c3) {
return c1 + c2 + c3;
}, col_1, col_2, col_3);
//advanced
//what I want to write
auto rangeview = 10*col_1 + 20*col_2 - 30*col_3;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto c2, auto c3) {
return 10.0*c1 + 20.0*c2 - 30.0*c3;
}, col_1, col_2, col_3);
//more advanced with elementwise multiplication
//what I want to write
auto rangeview = 10*col_1 + 20*col_2 - col_2 % col_3;
//what I can write
auto rangeview = rv::zip_with([](auto c1, auto c2, auto c3) {
return 10.0*c1 + 20.0*c2 - c2*c3;
}, col_1, col_2, col_3);
最佳答案
您主要关心的是可能创建的(可能是巨大的)临时对象。这可以通过称为表达式模板的概念来解决,但实际上并没有一种适合所有解决方案的尺寸。最好的选择可能是切换到支持该功能的矩阵库。除非您正在开发一个库或要对此进行投资,否则您可能希望避免编写自己的表达模板。一种更简单的方法,但是没有很多运算符重载/表达式模板,可以使用具有自定义迭代类型的基于范围的for循环(语法上不像表达式模板那样繁琐,但更易于实现):
伪代码:
*resultype* result;//perhaps alloc on this line or make zip handle it..
for (auto z : zip(result, col_1, col_2, col_3)) {
z[0] = 10.0*z[1] + 20.0*z[2] - 30.0*z[3];
}
zip
类我不在这个答案范围之内。
关于c++ - Range-v3运算符重载以编写较短的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714417/
我是一名优秀的程序员,十分优秀!