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
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.