<functional>

Define as funções da Biblioteca Padrão C++ que ajudam a construir objetos de função — também conhecidos como functors — e os respectivos associadores. Um objeto de função é um objeto de um tipo que define operator(). Um objeto de função pode ser um ponteiro de função, mas normalmente o objeto é usado para armazenar informações adicionais que possam ser acessadas durante uma chamada de função.

Requisitos

Cabeçalho:<functional>

Namespace: std

Comentários

Algoritmos exigem dois tipos de objetos de função: unário e binário. Objetos de função unários exigem um argumento e objetos de função binários requerem dois argumentos. Um objeto de função e ponteiros de função podem ser passados como um predicado para um algoritmo, mas objetos de função também são adaptáveis e aumentam o escopo, a flexibilidade e a eficiência da Biblioteca Padrão C++. Se, por exemplo, um valor precisasse ser associado a uma função antes de ser passado para um algoritmo, um ponteiro de função não poderia ser usado. Adaptadores de função convertem ponteiros de função em objetos de função adaptáveis que podem ser associados a um valor. O cabeçalho <functional> também contém adaptadores de função membro que permitem que funções membro sejam chamadas como objetos de função adaptáveis. Funções são adaptáveis se tiverem declarações de tipo aninhado especificando seus tipos de retorno e argumento. Objetos de função e seus adaptadores permitem que a Biblioteca Padrão C++ atualize aplicativos existentes e ajudam a integrar a biblioteca ao ambiente de programação do C++.

A implementação dos objetos de função em <funcional> inclui functores de operador transparentes, que são especializações de objetos de função padrão e não usam parâmetros de modelo e executam o encaminhamento perfeito dos argumentos da função e o retorno perfeito do resultado. Essas especializações de modelo não exigem que você especifique tipos de argumento ao invocar functores de operadores bit a bit, lógicos, de comparação e aritméticos. Você pode sobrecarregar operadores bit a bit, aritméticos, de comparação ou bit para seus próprios tipos ou para combinações heterogêneas de tipos e, em seguida, usar os functores de operadores transparentes como argumentos de função. Por exemplo, se seu tipo MyType implementar operator<, você pode chamar sort(my_collection.begin(), my_collection.end(), less<>()) em vez de especificar explicitamente o tipo sort(my_collection.begin(), my_collection.end(), less<MyType>()).

Os seguintes recursos foram adicionados no C++11, C++14 e C++17:

  • Uma assinatura de chamada é o nome de um tipo de retorno seguido por uma lista separada por vírgulas de zero ou mais tipos de argumento, entre parênteses.

  • Um tipo que pode ser chamado é um ponteiro para a função, um ponteiro para a função membro, um ponteiro para dados do membro ou um tipo de classe cujos objetos podem aparecer imediatamente à esquerda de um operador de chamada de função.

  • Um objeto que pode ser chamado é um objeto de tipo que pode ser chamado.

  • Um tipo de wrapper de chamada é um tipo que contém um objeto que pode ser chamado e dá suporte a uma operação de chamada que é encaminhada a esse objeto.

  • Um wrapper de chamada é um objeto do tipo wrapper de chamada.

  • Um objeto de destino é o objeto que pode ser chamado mantido por um objeto de wrapper de chamada.

A pseudo função INVOKE(f, t1, t2, ..., tN) significa uma das possibilidades a seguir:

  • (t1.*f)(t2, ..., tN) quando f é um ponteiro para uma função membro da classe T e t1 é um objeto do tipo T ou uma referência a um objeto do tipo T ou uma referência a um objeto de um tipo derivado de T.

  • ((*t1).*f)(t2, ..., tN) quando f é um ponteiro para uma função membro da classe T e t1 não é um dos tipos descritos no item anterior.

  • t1.*f quando N == 1 e f é um ponteiro para dados de membro de uma classe T e t1 é um objeto do tipo T ou uma referência a um objeto do tipo T ou uma referência a um objeto de um tipo derivado de T.

  • (*t1).*f quando N == 1 e f é um ponteiro para dados de membro de uma classe T e t1 não é um dos tipos descritos no item anterior.

  • f(t1, t2, ..., tN) em todos os outros casos.

A pseudo função INVOKE(f, t1, t2, ..., tN, R) significa que INVOKE(f, t1, t2, ..., tN) foi convertido implicitamente para R.

Se um wrapper de chamada tiver um tipo de resultado fraco, o tipo de seu membro result_type será baseado no tipo T do objeto de destino do wrapper, da seguinte maneira:

  • Se T for um ponteiro para função, result_type será um sinônimo do tipo de retorno de T.

  • Se T for um ponteiro para função membro, result_type será um sinônimo do tipo de retorno de T.

  • Se T for um tipo de classe que tem um tipo de membro result_type, result_type será sinônimo de T::result_type.

  • Caso contrário, não há nenhum membro result_type.

Cada wrapper de chamada tem um construtor de movimentação e um construtor de cópia. Um wrapper de chamada simples é um wrapper de chamada que tem um operador de atribuição e cujo construtor de cópia, construtor de movimentação e operador de atribuição não geram exceções. Um wrapper de chamada de encaminhamento é um wrapper de chamada que pode ser chamado usando uma lista de argumentos arbitrários e que fornece os argumentos como referências ao objeto que pode ser chamado encapsulado. Todos os argumentos rvalue são fornecidos como referências de rvalue e os argumentos de lvalue são entregues como referências de lvalue.

Membros

Classes

Nome Descrição
bad_function_call Uma classe que descreve uma exceção gerada para indicar que uma chamada para operator() em um objeto function falhou porque o objeto estava vazio.
binary_negate Um modelo de classe que fornece uma função membro que nega o valor retornado de uma função binária especificada.
(Preterido no C++17.)
binder1st Um modelo de classe que fornece um construtor que converte um objeto de função binária em um objeto de função unária, associando o primeiro argumento da função binária a um valor especificado.
(Preterido no C++11, removido no C++17.)
binder2nd Um modelo de classe que mostra um construtor que transforma um objeto de função binária em um objeto de função unária associando o segundo argumento da função binária a um valor especificado.
(Preterido no C++11, removido no C++17.)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t Uma classe de adaptador que permite que uma função de membro const que não usa argumentos seja chamada como um objeto de função unária quando inicializado com um argumento de referência.
(Preterido no C++11, removido no C++17.)
const_mem_fun_t Uma classe de adaptador que permite que uma função de membro const que não usa argumentos seja chamada como um objeto de função unária quando inicializado com um argumento de ponteiro.
(Preterido no C++11, removido no C++17.)
const_mem_fun1_ref_t Uma classe de adaptador que permite que uma função membro const que usa um único argumento seja chamada como um objeto de função binária quando inicializado com um argumento de referência.
(Preterido no C++11, removido no C++17.)
const_mem_fun1_t Uma classe de adaptador que permite que uma função de membro const que usa um único argumento seja chamada como um objeto de função binário quando inicializada com um argumento de ponteiro.
(Preterido no C++11, removido no C++17.)
default_searcher
function Uma classe que encapsula um objeto que pode ser chamado.
hash Uma classe que computa um código hash para um valor.
is_bind_expression Uma classe que testa se um tipo específico é gerado chamando bind.
is_placeholder Uma classe que testa se um tipo específico é um espaço reservado.
mem_fun_ref_t Uma classe de adaptador que permite que uma função de membro non_const que não usa argumentos seja chamada como um objeto de função unária quando inicializado com um argumento de referência.
(Preterido no C++11, removido no C++17.)
mem_fun_t Uma classe de adaptador que permite que uma função de membro non_const que não usa argumentos seja chamada como um objeto de função unária quando inicializada com um argumento de ponteiro.
(Preterido no C++11, removido no C++17.)
mem_fun1_ref_t Uma classe de adaptador que permite que uma função membro non_const que usa um único argumento seja chamada como um objeto de função binária quando inicializado com um argumento de referência.
(Preterido no C++11, removido no C++17.)
mem_fun1_t Uma classe de adaptador que permite que uma função de membro non_const que usa um único argumento seja chamada como um objeto de função binário quando inicializada com um argumento de ponteiro.
(Preterido no C++11, removido no C++17.)
pointer_to_binary_function Converte um ponteiro de função binária em uma função binária adaptável.
(Preterido no C++11, removido no C++17.)
pointer_to_unary_function Converte um ponteiro de função unária em uma função unária adaptável.
(Preterido no C++11, removido no C++17.)
reference_wrapper Uma classe que encapsula uma referência.
unary_negate Um modelo de classe que fornece uma função membro que nega o valor retornado de uma função unária especificada.
(Preterido no C++17.)

Funções

Nome Descrição
bind Associa argumentos a um objeto que pode ser chamado.
bind1st Uma função de modelo auxiliar que cria um adaptador para converter um objeto de função binária em um objeto de função unária, associando o primeiro argumento da função binária a um valor especificado.
(Preterido no C++11, removido no C++17.)
bind2nd Uma função de modelo auxiliar que cria um adaptador para converter um objeto de função binária em um objeto de função unária, associando o segundo argumento da função binária a um valor especificado.
(Preterido no C++11, removido no C++17.)
bit_and Retorna o AND bit a bit (binário operator&) dos dois parâmetros.
bit_not Retorna o complemento bit a bit (operator~) do parâmetro.
(Adicionado no C++14.)
bit_or Retorna o OR bit a bit (operator|) dos dois parâmetros.
bit_xor Retorna o XOR bit a bit (operator^) dos dois parâmetros.
cref Constrói uma constante reference_wrapper de um argumento.
invoke
mem_fn Gera um wrapper de chamada simples.
mem_fun Funções de modelo auxiliares usadas para construir adaptadores de objeto de função para funções membro, quando inicializadas com argumentos de ponteiro.
(Preterido no C++11, removido no C++17.)
mem_fun_ref Uma função de modelo auxiliar usada para construir adaptadores de objeto de função para funções membro, quando inicializada com argumentos de referência.
not1 Retorna o complemento de um predicado unário.
(Preterido no C++17.)
not2 Retorna o complemento de um predicado binário.
(Preterido no C++17.)
not_fn Retorna o complemento do resultado do respectivo objeto de função.
(Adicionado no C++17.)
ptr_fun Uma função de modelo auxiliar usada para converter ponteiros de funções unárias e binárias, respectivamente, em funções adaptáveis unárias e binárias.
(Preterido no C++11, removido no C++17.)
ref Constrói um reference_wrapper de um argumento.
troca Troca dois objetos function.

Estruturas

Nome Descrição
binary_function Uma classe base vazia que define tipos que podem ser herdados por uma classe derivada que fornece um objeto de função binária.
(Preterido no C++11, removido no C++17.)
divides A classe fornece um objeto de função predefinida que executa a operação de divisão aritmética em elementos de um tipo de valor especificado.
equal_to Um predicado binário que testa se um valor de um tipo especificado é igual a outro valor desse tipo.
greater Um predicado binário que testa se um valor de um tipo especificado é maior que outro valor desse tipo.
greater_equal Um predicado binário que testa se um valor de um tipo especificado é maior ou igual a outro valor desse tipo.
less Um predicado binário que testa se um valor de um tipo especificado é menor que outro valor desse tipo.
less_equal Um predicado binário que testa se um valor de um tipo especificado é menor ou igual a outro valor desse tipo.
logical_and A classe fornece um objeto de função predefinido que executa a operação lógica de conjunção dos elementos de um tipo de valor especificado e testa se o resultado é verdadeiro ou falso.
logical_not A classe fornece um objeto de função predefinido que executa a operação lógica de negação dos elementos de um tipo de valor especificado e testa se o resultado é verdadeiro ou falso.
logical_or A classe fornece um objeto de função predefinido que executa a operação lógica de disjunção dos elementos de um tipo de valor especificado e testa se o resultado é verdadeiro ou falso.
minus A classe fornece um objeto de função predefinido que executa a operação aritmética de subtração em elementos de um tipo de valor especificado.
módulo A classe fornece um objeto de função predefinido que executa a operação aritmética de módulo em elementos de um tipo de valor especificado.
multiplies A classe fornece um objeto de função predefinido que executa a operação aritmética de multiplicação em elementos de um tipo de valor especificado.
negate A classe fornece um objeto de função predefinido que retorna o negativo de um valor de elemento.
not_equal_to Um predicado binário que testa se um valor de um tipo especificado não é igual a outro valor desse tipo.
plus A classe fornece um objeto de função predefinida que executa a operação aritmética de adição em elementos de um tipo de valor especificado.
unary_function Uma classe base vazia que define tipos que podem ser herdados por uma classe derivada que fornece um objeto de função unária.
(Preterido no C++11, removido no C++17.)

Objetos

Nome Descrição
_1.._M Espaços reservados para argumentos substituíveis.

Operadores

Nome Descrição
operator== Não permite comparações de igualdade de objetos que podem ser chamados.
operator!= Não permite comparações de desigualdade de objetos que podem ser chamados.

Confira também

Referência de Arquivos de Cabeçalho
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++