Как обработать множество диапазонов с одной и той же безымянной лямбдой?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как обработать множество диапазонов с одной и той же безымянной лямбдой?

Сообщение Anonymous »

У меня есть безымянная лямбда-функция, которую мне нужно применить ко многим диапазонам, и я не хочу повторять ее, чтобы избежать дублирования кода (она состоит из более чем 5 строк кода).
Пока мы ждем поддержки std::ranges::views::concat от всех компиляторов, как проще всего это реализовать?
Я хочу иметь что-то вроде код ниже с некоторыми оговорками:
  • Мне бы хотелось, чтобы лямбда-выражение располагалось в конце списка аргументов, как в большинстве алгоритмов std.
  • Я бы меня больше устраивает синтаксис for_each_range({r1,r2,r3},lambda), но я не могу понять, как заставить эти { } работать здесь. Std::initializer_list, похоже, не мой путь, поскольку для него требуются константные данные, и мне приходится менять значения в диапазонах.

Код: Выделить всё

#include 
#include 
#include 

template
void for_each_range(Func func, R&& range)
{
for (auto& container : range) {
func(container);
}
}

template
void for_each_range(Func func, R&& range, Args&&... ranges)
{
for (auto& container : range) {
func(container);
}

for_each_range(func, ranges...);
}

int main()
{
std::vector weights = { 1.0f, 2.0f, 3.0f };
std::vector masks = { 1.0f, 0.0f, 1.0f };

for_each_range([](auto& v) { v = 7.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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»