<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)
quandof
é um ponteiro para uma função membro da classeT
et1
é um objeto do tipoT
ou uma referência a um objeto do tipoT
ou uma referência a um objeto de um tipo derivado deT
.((*t1).*f)(t2, ..., tN)
quandof
é um ponteiro para uma função membro da classeT
et1
não é um dos tipos descritos no item anterior.t1.*f
quando N == 1 ef
é um ponteiro para dados de membro de uma classeT
et1
é um objeto do tipoT
ou uma referência a um objeto do tipoT
ou uma referência a um objeto de um tipo derivado deT
.(*t1).*f
quando N == 1 ef
é um ponteiro para dados de membro de uma classeT
et1
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 deT
.Se
T
for um ponteiro para função membro,result_type
será um sinônimo do tipo de retorno deT
.Se
T
for um tipo de classe que tem um tipo de membroresult_type
,result_type
será sinônimo deT::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++