Кратчайший способ вызвать шаблонную лямбду в C ++

Представьте себе следующий игрушечный пример шаблонной лямбды:

auto f = []<typename T>(){};

Самый короткий известный мне способ вызвать эту лямбду для типа int - это f.operator()<int>();.

Попробовать в Интернете

Кто-нибудь знает, есть ли более простой / короткий синтаксис для вызова шаблонной лямбды?

Разумеется, f<int>(); не компилируется, но было бы неплохо иметь такой синтаксис, похожий на вызов функции шаблона.

Но, возможно, в стандарте C ++ они изобрели для лямбды какой-то специальный псевдоним ярлыка, о котором я не знаю, например f._<int>();, здесь воображаемый _ - это имя метода, который просто перенаправляет все аргументы методу .operator(). Есть что-нибудь подобное? А может f.call<int>()?

Я понимаю, что лямбда ведет себя как простой класс функтора с методом .operator(), следовательно, такой же длинный синтаксис вызова, что и для шаблонного функтора f.operator()<int>(). Но в своем пользовательском функторе вы можете изобрести метод псевдонима _, который пересылает аргументы, есть ли такой похожий псевдоним в лямбде?

Как сказал @RedFog, можно реализовать вспомогательную функцию, которую вы используете, например call<int>(f);, но я не знаю, как реализовать такую ​​функцию для очень общего случая - представьте, если лямбда имеет сочетание параметров typename и auto, например []<typename A, auto B, typename Q>{};, я не Не знаю, как написать очень общую вспомогательную функцию для такого смешанного случая.


person Arty    schedule 24.04.2021    source источник
comment
а как насчет call<int>(f) или call<int>(f)()?   -  person RedFog    schedule 24.04.2021
comment
@RedFog Вы хотите создать внешнюю вспомогательную функцию? Как решение для резервного копирования, спасибо! Но мне любопытно, может ли стандартная лямбда иметь какой-нибудь готовый _() метод для выполнения таких сокращений. Нужны специалисты, которые точно скажут нам, существует ли такой дополнительный метод или нет.   -  person Arty    schedule 24.04.2021
comment
@RedFog Также вспомогательная функция, вероятно, не может охватить все типы параметров шаблона. Представьте, что лямбда имеет длинный список комбинаций параметров auto и typename, например []<typename T, auto X, typename Q>{};, тогда я не знаю, как реализовать вспомогательную функцию call() для поддержки любого списка параметров шаблона.   -  person Arty    schedule 24.04.2021
comment
да, это не может решить всю проблему, просто для обычного случая typename.... но , если стандартная лямбда может иметь какой-нибудь готовый _() метод для выполнения таких сокращений, я боюсь, что нет.   -  person RedFog    schedule 24.04.2021
comment
Учитывая отсутствие какого-либо специального синтаксиса, ограничивает и использует C ++ 20 шаблонные лямбы кажутся дубликатами.   -  person Davis Herring    schedule 24.04.2021