Ir para o conteúdo

Última atualização:2026-10-12

Expressões Lambda no C++20 (parte 1)

Templates de lambda no C++20

O C++14 oferece suporte a expressões lambda genéricas, o que permite que uma lambda aceite parâmetros de qualquer tipo, por exemplo:

auto func = [](auto a, auto b) {
    return a + b;
};

seria expandida para:

struct Func {
    template <typename T1, typename T2>
    auto operator()(T1 a, T2 b) const {
        return a + b;
    }
};

Porém, ela não consegue produzir as expansões abaixo:

Primeiro caso: mesmos tipos

`cpp template <class T> auto operator()(T t1, T t2) const;

Segundo caso: apenas std::array

cpp template <class T, std::size_t N> auto operator()(std::array<T, N> const &) const;

Terceiro caso: sem dedução

template <class T> auto operator()() const;

As lambdas do C++14 são muito boas, mas o C++20 nos permite realizar esses casos com facilidade. O C++20 permite que expressões lambda usem parâmetros de tipo template em sua definição; a sintaxe básica é a seguinte:

cpp []<typename T>(){}

A seguir, alguns exemplos ilustram seus benefícios.

1.Restrição de tipos

Em um exemplo como o abaixo, no C++14 podemos escrever o código a seguir; porém, ao usá-lo, o que é passado não é necessariamente um vector e, assim, o comportamento diverge do esperado, gerando erros.

cpp auto print = [](auto vec) { for (auto x : vec) { std::cout << x << std::endl; } };

A partir do C++20, podemos restringir o tipo:

cpp auto print2 = []<typename T>(std::vector<T>& vec){ //使用 std::vector<T> 执行操作 };

Então surge a pergunta, uma questão de entrevista: você sabe como garantir segurança no C++14 para restringir a um vector?

2.Encaminhamento perfeito

No C++20, você pode usar o encaminhamento perfeito com muita facilidade; por exemplo:

cpp auto lambdaFunc = []<typename T>(T&& number) { processFunction(std::forward<T>(number)); };

Então surge a pergunta: em comparação com o C++14, qual é a vantagem? Ou seja, o que o C++14 precisaria para implementar o encaminhamento perfeito?

Fim desta seção

Tópicos relacionados

Comentários