Новий "знайомий синтаксис шаблону" для лямбда, введений в C ++ 20, робить такі конструкції як for_types
і for_range
життєздатними, і набагато читабельнішими порівняно з альтернативами C ++ 17.
(джерело: ітерація під час компіляції з лямбдами C ++ 20 )
Ще одна цікава річ, яку можна зробити як на загальних лямбдах C ++ 14, так і на C ++ 17, - це прямий виклик operator()
, явно передавши параметр шаблону:
C ++ 14:
auto l = [](auto){ };
l.template operator()<int>(0);
C ++ 20:
auto l = []<typename T>(){ };
l.template operator()<int>();
Наведений вище приклад C ++ 14 абсолютно марний: немає жодного способу посилатися на тип, наданий operator()
в тілі лямбда, не вказавши аргументу ім’я та не використовуючи decltype
. Крім того, ми змушені висловити аргумент, хоча він нам може і не знадобитися.
Приклад C ++ 20 показує, як T легко доступний в тілі лямбда-сигналу, і що ядерну лямбду тепер можна довільно шаблонувати. Це буде дуже корисно для реалізації згаданих конструкцій часу компіляції