Каков самый простой способ реализовать это?
Я хочу иметь что-то вроде приведенного ниже кода с некоторыми оговорками:
- < li>Мне бы хотелось, чтобы лямбда-выражение располагалось в конце списка аргументов, как в большинстве std алгоритмы.
- Меня бы больше устроил синтаксис for_each_range({r1,r2,r3},lambda), но я не могу разобраться как заставить эти { } работать здесь. Std::initializer_list, похоже, не мой путь, поскольку для него требуются константные данные, и мне приходится менять значения в диапазонах.
Код: Выделить всё
#include
#include
#include
#include
#include
template
void for_each_range(Func func, Args&&... ranges)
{
(func(ranges),...);
}
int main()
{
std::vector weights = { 1.0f, 3.0f, 5.0f };
std::vector masks = { 1.0f, 0.0f, 1.0f };
for_each_range([](auto& v) {
std::iota(v.begin(), v.end(), 0.0f);
}, weights, masks);
std::ranges::copy
(
weights,
std::ostream_iterator{std::cout, ", "}
);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79314235/how-to-process-many-ranges-with-the-same-nameless-lambda[/url]