Follow

Постепенно добираюсь до C++20. Понравилась возможность использования template parameters в лямбдах, которая явно улучшает читаемость кода.

Пример:
<iostream>
<vector>

int main()
{
std::vector<int> intItems = { 9, 10, -7, 11 };
std::vector<float> floatItems = { 1.0f, 9.0f, 5.01f, 99.12f };
std::vector<double> doubleItems;
int counter{};

auto processItem = [&counter]<typename T>(const std::vector<T>& items) {
std::cout << "================\n";
auto it = std::max_element(items.begin(), items.end());
if (it != items.end())
{
std::cout << "Max value: " << *it << "\n";
}
else
{
std::cout << "No items\n";
}
std::cout << "================\n";
++counter;
};

processItem(intItems);
processItem(floatItems);
processItem(doubleItems);
std::cout << "Processed " << counter << " items\n";
return 0;
}

Результат исполнения:
================
Max value: 11
================
================
Max value: 99.12
================
================
No items
================
Processed 3 items

До C++20 вынужден использовать generic lambda следующим образом:
...
auto processItem = [&counter](const auto& items) {
...
}
...

Sign in to participate in the conversation
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.