Общие лямбда-выражения c ++: вывод типа шаблона - PullRequest
0 голосов
/ 20 мая 2018

В C ++ 20, по предложению Синтаксис знакомого шаблона для универсальных лямбд , следующий код правильно выводит тип T:

auto lamTest = []<typename T>(std::initializer_list<T> const & l)
{
    std::vector<T> v{ l };
    for (auto && e : v)
        std::cout << e << " ";
};
lamTest( { 1,2,3 } );

Возможно ли сделать этот видвывод шаблона в C ++ 17 (или 14)?

Примечание: я спрашиваю конкретно о лямбда-выражениях.

1 Ответ

0 голосов
/ 20 мая 2018

Это стандартное удержание шаблона функции.Это ничем не отличается от этого:

template<typename T>
auto lamTest(std::initializer_list<T> const & l)
{
    std::vector<T> v{ l };
    for (auto && e : v)
        std::cout << e << " ";
};

Что (кроме std::initializer_list) является обычным кодом C ++ 98.

Единственное, что добавляет C ++ 20, - это возможностьписать лямбда-выражения с явным списком параметров шаблона, а не (или в дополнение к) в C ++ 14 auto.В остальном он ведет себя так же, как и любая другая функция шаблона.

...