O modelo de classe std::function
é um wrapper de função polimórfica de uso geral. Instâncias de std::function
podem armazenar, copiar e invocar qualquer destino: expressões lambda , expressões de ligação ou outros objetos de função, bem como ponteiros para funções de membro e ponteiros para membros de dados.
std::function
é um tipo de objeto de eliminação. Isso significa que ele apaga os detalhes de como algumas operações acontecem e fornece uma interface de tempo de execução uniforme para elas.
Para usar std::function
é necessário incluir o cabeçalho: <functional>
.
O uso mais básico seria o exemplo abaixo:
Nesse caso ela armazena a função
quadrado
sem precisar informar os parâmetros, nesse caso ela recebe umint
dentro dos parênteses e retorna umint
dentro doscolchetes angulares
.
Nesse caso ela armazena dois int
e retorna um double
:
Similar ao acima, mas agora ela é um ponteiro de função para o endereço de &soma
:
No cabeçalho <functional>
também está disponível std::negate
, nesse caso, usando std::negate
ela inverte o valor da saída:
Saída:
-42
.
Ela também pode ser usada em conjunto com lambda, dessa forma a assinatura dela torna possível identificar a lambda:
Ou seja, é mais um recurso da STL que pode ser útil em diversos casos em que o desempenho é fundamental, mas o debug também. Para mais informações veja nesse link.