<functional>
Definisce le funzioni della libreria standard C++ che consentono di costruire oggetti funzione, noti anche come funtori e relativi binder. Un oggetto funzione è un oggetto di un tipo che definisce operator()
. Un oggetto funzione può essere un puntatore a funzione, ma più tipicamente l'oggetto viene utilizzato per archiviare le informazioni aggiuntive accessibili durante una chiamata di funzione.
Requisiti
Intestazione:<funzionale>
Spazio dei nomi: std
Osservazioni:
Gli algoritmi richiedono due tipi di oggetti funzione: unario e binario. Gli oggetti funzione di tipo unario richiedono un argomento, mentre gli oggetti funzione di tipo binario richiedono due argomenti. Un oggetto funzione e i puntatori a funzione possono essere passati come predicato a un algoritmo, ma gli oggetti funzione sono anche adattabili e aumentano l'ambito, la flessibilità e l'efficienza della libreria standard C++. Se, ad esempio, un valore deve essere associato a una funzione prima del passaggio a un algoritmo, non è possibile ad esempio utilizzare un puntatore a funzione. Gli adattatori di funzione convertono i puntatori a funzione in oggetti funzione adattabili che possono essere associati a un valore. Il funzionamento dell'intestazione <> contiene anche adattatori di funzioni membro che consentono di chiamare le funzioni membro come oggetti funzione adattabili. Le funzioni sono adattabili se le dichiarazioni di tipo corrispondenti sono annidate, ne specificano l'argomento e i tipi restituiti. Gli oggetti funzione e i relativi adattatori consentono alla libreria standard C++ di aggiornare le applicazioni esistenti, oltre a facilitare l'integrazione di tale libreria nell'ambiente di programmazione C++.
L'implementazione degli oggetti funzione in <funzionale> include funtori di operatori trasparenti, che sono specializzazioni di oggetti funzione standard e non accettano parametri di modello ed eseguono l'inoltro perfetto degli argomenti della funzione e la restituzione perfetta del risultato. In queste specializzazioni del modello non è necessario specificare i tipi di argomento quando si richiamano i funtori di aritmetica, di confronto e degli operatori bit per bit. È possibile eseguire l'overload degli operatori di aritmetica, di confronto, logici o bit per bit per i tipi personalizzati o per le combinazioni eterogenee di tipi, quindi utilizzare i funtori di operatore trasparenti come argomenti della funzione. Ad esempio, se il tipo MyType implementa operator<
, è possibile chiamare sort(my_collection.begin(), my_collection.end(), less<>())
anziché specificare in modo esplicito il tipo sort(my_collection.begin(), my_collection.end(), less<MyType>())
.
Le funzionalità seguenti vengono aggiunte in C++11, C++14 e C++17:
Una firma di chiamata è il nome di un tipo restituito seguito da un elenco di zero o di più tipi di argomenti delimitato da virgole tra parentesi.
Un tipo chiamabile è un puntatore a funzione, a una funzione membro, ai dati dei membri o un tipo di classe i cui oggetti possono apparire immediatamente a sinistra di un operatore di chiamata di funzione.
Un oggetto chiamabile è un oggetto di tipo chiamabile.
Un tipo wrapper di chiamata è un tipo che include un oggetto chiamabile e supporta un'operazione di chiamata che esegue l'inoltro a tale oggetto.
Un wrapper di chiamata è un oggetto di tipo wrapper di chiamata.
Un oggetto di destinazione è l'oggetto chiamabile incluso in un oggetto wrapper di chiamata.
La pseudo-funzione INVOKE(f, t1, t2, ..., tN)
indica una delle seguenti operazioni:
(t1.*f)(t2, ..., tN)
quandof
è un puntatore alla funzione membro di classeT
et1
è un oggetto di tipoT
, un riferimento a un oggetto di tipoT
o un riferimento a un oggetto di un tipo derivato daT
.((*t1).*f)(t2, ..., tN)
quandof
è un puntatore alla funzione membro di classeT
et1
non è uno dei tipi descritti nell'elemento precedente.t1.*f
quando N == 1 ef
è un puntatore ai dati dei membri di una classeT
et1
è un oggetto di tipoT
, un riferimento a un oggetto di tipoT
o un riferimento a un oggetto di un tipo derivato daT
.(*t1).*f
quando N== 1 ef
è un puntatore ai dati dei membri di una classeT
et1
non è uno dei tipi descritti nell'elemento precedente.f(t1, t2, ..., tN)
in tutti gli altri casi.
La pseudo-funzione INVOKE(f, t1, t2, ..., tN, R)
indica INVOKE(f, t1, t2, ..., tN)
implicitamente convertito in R
.
Se un wrapper di chiamata ha un tipo di risultato debole, il relativo tipo di membro result_type
è basato sul tipo T
dell'oggetto di destinazione del wrapper, come indicato di seguito:
Se
T
è un puntatore a una funzione,result_type
è sinonimo del tipo restituito diT
.Se
T
è un puntatore a una funzione membro,result_type
è sinonimo del tipo restituito diT
.Se
T
è un tipo di classe con un membro di tiporesult_type
,result_type
è sinonimo diT::result_type
.In caso contrario, non è presente alcun membro di
result_type
.
A ogni wrapper di chiamata è associato un costruttore di spostamento e uno di copia. Un wrapper di chiamata semplice è un wrapper di chiamata che ha un operatore di assegnazione e i cui costruttori di copia e di spostamento e l'operatore di assegnazione non generano eccezioni. Un wrapper di chiamata di inoltro è un wrapper di chiamata che può essere chiamato mediante un elenco di argomenti arbitrari e che passa come riferimenti gli argomenti all'oggetto chiamabile di cui è stato eseguito il wrapping. Tutti gli argomenti rvalue vengono passati come riferimenti rvalue e gli argomenti lvalue vengono passati come riferimenti lvalue.
Membri
Classi
Nome | Descrizione |
---|---|
bad_function_call | Classe che descrive un'eccezione generata per indicare che una chiamata a operator() su un oggetto function non è riuscita perché l'oggetto era vuoto. |
binary_negate | Modello di classe che fornisce una funzione membro che nega il valore restituito di una funzione binaria specificata. (Deprecato in C++17). |
binder1st | Modello di classe che fornisce un costruttore che converte un oggetto funzione binaria in un oggetto funzione unario associando il primo argomento della funzione binaria a un valore specificato. (Deprecato in C++11, rimosso in C++17). |
binder2nd | Modello di classe che fornisce un costruttore che converte un oggetto funzione binaria in un oggetto funzione unario associando il secondo argomento della funzione binaria a un valore specificato. (Deprecato in C++11, rimosso in C++17). |
boyer_moore_horspool_searcher | |
boyer_moore_searcher | |
const_mem_fun_ref_t | Classe di adattatori che consente a una funzione membro const che non accetta argomenti di chiamare gli operatori come oggetto funzione unaria una volta inizializzata con un argomento di riferimento. (Deprecato in C++11, rimosso in C++17). |
const_mem_fun_t | Classe di adattatori che consente a una funzione membro const che non accetta argomenti di chiamare gli operatori come oggetto funzione unaria una volta inizializzata con un argomento di puntatore. (Deprecato in C++11, rimosso in C++17). |
const_mem_fun1_ref_t | Classe di adattatori che consente a una funzione membro const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unaria una volta inizializzata con un argomento di riferimento. (Deprecato in C++11, rimosso in C++17). |
const_mem_fun1_t | Classe di adattatori che consente a una funzione membro const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unaria una volta inizializzata con un argomento di puntatore. (Deprecato in C++11, rimosso in C++17). |
default_searcher | |
function | Classe che esegue il wrapping di un oggetto chiamabile. |
hash | Classe che calcola un codice hash per un valore. |
is_bind_expression | Classe che consente di verificare se un particolare tipo viene generato chiamando bind . |
is_placeholder | Classe che consente di verificare se un particolare tipo è un segnaposto. |
mem_fun_ref_t | Classe adapter che consente a una non_const funzione membro che non accetta argomenti da chiamare come oggetto funzione unario quando viene inizializzato con un argomento di riferimento.(Deprecato in C++11, rimosso in C++17). |
mem_fun_t | Classe adapter che consente a una non_const funzione membro che non accetta argomenti da chiamare come oggetto funzione unario quando viene inizializzato con un argomento puntatore.(Deprecato in C++11, rimosso in C++17). |
mem_fun1_ref_t | Classe adapter che consente a una non_const funzione membro che accetta un singolo argomento da chiamare come oggetto funzione binaria quando viene inizializzato con un argomento di riferimento.(Deprecato in C++11, rimosso in C++17). |
mem_fun1_t | Classe adapter che consente a una non_const funzione membro che accetta un singolo argomento da chiamare come oggetto funzione binaria durante l'inizializzazione con un argomento puntatore.(Deprecato in C++11, rimosso in C++17). |
pointer_to_binary_function | Converte un puntatore a funzione binaria in una funzione binaria adattabile. (Deprecato in C++11, rimosso in C++17). |
pointer_to_unary_function | Converte un puntatore a funzione unaria in una funzione unaria adattabile. (Deprecato in C++11, rimosso in C++17). |
reference_wrapper | Classe che incapsula un riferimento. |
unary_negate | Modello di classe che fornisce una funzione membro che nega il valore restituito di una funzione unaria specificata. (Deprecato in C++17). |
Funzioni
Nome | Descrizione |
---|---|
bind | Associa gli argomenti a un oggetto richiamabile. |
bind1st | Funzione di modello helper che crea un adattatore per convertire un oggetto funzione binaria in un oggetto funzione unaria associando il primo argomento della funzione binaria a un valore specificato. (Deprecato in C++11, rimosso in C++17). |
bind2nd | Funzione di modello helper che crea un adattatore per convertire un oggetto funzione binaria in un oggetto funzione unaria associando il secondo argomento della funzione binaria a un valore specificato. (Deprecato in C++11, rimosso in C++17). |
bit_and | Restituisce l'AND bit per bit (binario operator& ) dei due parametri. |
bit_not | Restituisce il complemento bit per bit (operator~ ) del parametro .Aggiunta in C++14. |
bit_or | Restituisce l'OR bit per bit (operator| ) dei due parametri. |
bit_xor | Restituisce l'XOR bit per bit (operator^ ) dei due parametri. |
cref | Costruisce un oggetto reference_wrapper di tipo const da un argomento. |
invoke | |
mem_fn | Genera un wrapper di chiamata semplice. |
mem_fun | Funzioni di modello helper utilizzate per costruire gli adattatori dell'oggetto funzione per funzioni membro una volta inizializzate con gli argomenti di puntatore. (Deprecato in C++11, rimosso in C++17). |
mem_fun_ref | Funzione di modello helper utilizzata per costruire gli adattatori dell'oggetto funzione per funzioni membro una volta inizializzata con gli argomenti di riferimento. |
not1 | Restituisce il complemento di un predicato unario. (Deprecato in C++17). |
not2 | Restituisce il complemento di un predicato binario. (Deprecato in C++17). |
not_fn | Restituisce il complemento del risultato del relativo oggetto funzione. Aggiunta in C++17. |
ptr_fun | Funzione di modello helper utilizzata per convertire i puntatori a funzioni unarie e binarie rispettivamente in funzioni adattabili unarie e binarie. (Deprecato in C++11, rimosso in C++17). |
ref | Costruisce un oggetto reference_wrapper da un argomento. |
swap | Scambia due oggetti function . |
Struct
Nome | Descrizione |
---|---|
binary_function | Classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione binaria. (Deprecato in C++11, rimosso in C++17). |
divides | La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di divisione sugli elementi di un tipo di valore specificato. |
equal_to | Predicato binario che verifica se un valore di un tipo specificato equivale a un altro valore di quel tipo. |
greater | Predicato binario che verifica se un valore di un tipo specificato è maggiore di un altro valore di quel tipo. |
greater_equal | Predicato binario che verifica se un valore di un tipo specificato è maggiore o uguale a un altro valore di quel tipo. |
less | Predicato binario che verifica se un valore di un tipo specificato è minore di un altro valore di quel tipo. |
less_equal | Predicato binario che verifica se un valore di un tipo specificato è minore o uguale a un altro valore di quel tipo. |
logical_and | La classe fornisce un oggetto funzione predefinito che esegue l'operazione di congiunzione logica sugli elementi di un tipo di valore specificato e verifica se il risultato è true o false. |
logical_not | La classe fornisce un oggetto funzione predefinito che esegue l'operazione di negazione logica sugli elementi di un tipo di valore specificato e verifica se il risultato è true o false. |
logical_or | La classe fornisce un oggetto funzione predefinito che esegue l'operazione di disgiunzione logica sugli elementi di un tipo di valore specificato e verifica se il risultato è true o false. |
minus | La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di sottrazione sugli elementi di un tipo di valore specificato. |
modulo | La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di modulo sugli elementi di un tipo di valore specificato. |
multiplies | La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di moltiplicazione sugli elementi di un tipo di valore specificato. |
negate | La classe fornisce un oggetto funzione predefinita che restituisce il corrispondente negativo del valore di un elemento. |
not_equal_to | Predicato binario che verifica se un valore di un tipo specificato non equivale a un altro valore di quel tipo. |
plus | La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di addizione sugli elementi di un tipo di valore specificato. |
unary_function | Classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione unaria. (Deprecato in C++11, rimosso in C++17). |
Oggetti
Nome | Descrizione |
---|---|
_1.._M | Segnaposto per gli argomenti sostituibili. |
Operatori
Nome | Descrizione |
---|---|
operator== | Impedisce il confronto di uguaglianza di oggetti richiamabili. |
operator!= | Impedisce il confronto di disuguaglianza di oggetti richiamabili. |
Vedi anche
Riferimento file di intestazione
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++