Перегрузка оператора Range-v3 для написания более короткого кода - PullRequest
0 голосов
/ 15 февраля 2019

Для моего матричного класса я хочу выполнить некоторую перегрузку операторов (возможно, используя шаблоны выражений) для представлений range-v3 для + - / * %.Например, если я хочу получить представление о сумме двух столбцов, я хочу написать

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