<functional>
Definisce le funzioni della libreria standard che aiutano a costruire oggetti funzione, meglio conosciuti come funtori (functors) e i loro binder. Un oggetto funzione è un oggetto di 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.
#include <functional>
Note
Gli algoritmi richiedono due tipi di oggetti funzione: unario e binario. Gli oggetti funzione di tipo unario richiedono un argomento, e 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 accrescono il campo di applicazione, la flessibilità e l'efficienza di STL. Se, ad esempio, un valore necessita di essere associato a una funzione prima del passaggio a un algoritmo, un puntatore a funzione non può essere utilizzato. Gli adattatori di funzione convertono i puntatori a funzione in oggetti funzione adattabili che possono essere associati a un valore. L'header <functional> contiene anche gli adattatori di funzione membro che consentono alle funzioni membro di chiamare gli operatori come oggetti funzione adattabili. Le funzioni sono adattabili se hanno dichiarazioni di tipo annidato che specificano il relativo argomento e restituiscono i tipi. Lo standard C++ richiede che l'adattabilità sia implementata avendo tutte le classi di oggetti standard che ereditano dalle classi base di binary_function o di unary_function. Gli oggetti funzione e i relativi adattatori permettono ad STL di aggiornare le applicazioni esistenti e consentono di integrare STL nell'ambiente di programmazione in C++.
L'implementazione Visual C++ degli oggetti funzione in <functional> include i functors degli operatori trasparenti, i quali sono specializzazioni degli oggetti funzione standard e non accettano parametri di modello, ed eseguono un inoltro perfetto degli argomenti di funzione e un ritorno perfetto del risultato. Questa funzionalità è parte della specifica dello standard C++ 14. In queste specializzazioni del modello non è necessario specificare i tipi di argomento quando si richiamano i funtori dell'aritmetica, del confronto, e degli operatori di bitwise. È possibile eseguire l'overload dell'aritmetica, del confronto, degli operatori logici o bit-per-bit per i propri tipi, o per le combinazioni eterogenee di tipi e quindi utilizzare i funtori dell'operatore trasparente 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>()).
Implementazione di C++11/C++14
Le seguenti funzionalità vengono aggiunte in Visual C++ nell'implementazione di C++11/C++14:
Una firma di chiamata è il nome di un tipo restituito seguito da un elenco di zero o più tipi di argomenti delimitato da virgole tra parentesi.
Un tipo richiamabile è un puntatore a funzione, un puntatore a una funzione membro, un puntatore ai dati dei membri, o un tipo di classe in cui gli oggetti possono apparire immediatamente a sinistra di un operatore di chiamata di funzione.
Un oggetto richiamabile è un oggetto di un tipo richiamabile.
Un tipo di chiamata wrapper è un tipo che utilizza un oggetto richiamabile e supporta un'operazione di chiamata che inoltra a tale oggetto.
Una chiamata wrapper è un oggetto di un tipo di una chiamata wrapper.
Un oggetto target è l'oggetto richiamabile utilizzato da un oggetto di chiamata wrapper
La pseudo-funzione INVOKE(f, t1, t2, ..., tN) indica una delle seguenti operazioni:
(t1.*f)(t2, ..., tN) quando f è un puntatore alla funzione membro di classe T e t1 è un oggetto di tipo T o di un riferimento a un oggetto di tipo T o di un riferimento a un oggetto di un tipo derivato da T.
((*t1).*f)(t2, ..., tN) quando f è un puntatore alla funzione membro di classe T e t1 non è uno dei tipi descritti nell'elemento precedente.
t1.*f quando N == 1 e f è un puntatore ai dati dei membri di una classe T e t1 è un oggetto di tipo T o di un riferimento a un oggetto di tipo T o di un riferimento a un oggetto di un tipo derivato da T.
(*t1).*f quando N== 1 e f è un puntatore ai dati dei membri di una classe T e t1 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 una chiamata wrapper ha un tipo di risultato debole, il tipo del proprio membro di tipo result_type è basato sul tipo T dell'oggetto di destinazione del wrapper, come segue:
Se T è un puntatore a funzione, result_type è sinonimo del tipo restituito di T.
Se T è un puntatore ad una funzione membro, result_type è sinonimo del tipo restituito di T.
Se T è un tipo di classe che ha un membro di tipo result_type, allora result_type è sinonimo di T::result_type.
In caso contrario, non vi è membro di result_type.
Ogni chiamata wrapper ha un costruttore di spostamento e un costruttore di copia. Una semplice chiamata wrapper è una chiamata wrapper che ha un operatore di assegnazione e di cui il costruttore di copia, il costruttore di spostamento e l'operatore di assegnazione non genera eccezioni. Una chiamata wrapper di inoltro è una chiamata wrapper che può essere chiamata tramite un elenco di argomenti arbitrario e recapita gli argomenti all'oggetto richiamabile di cui è stato eseguito il wrapping come riferimenti. Tutti gli argomenti rvalue vengono resi come riferimenti rvalue e gli argomenti lvalue vengono resi come riferimenti lvalue.
Classi
Una classe che descrive l'eccezione generata per indicare che una chiamata a operator() su un oggetto funzione è fallita perché l'oggetto è vuoto. |
|
Una classe modello che fornisce una funzione membro che nega il valore restituito di una funzione binaria specificata. |
|
Una classe modello che fornisce un costruttore che converte un oggetto funzione binario in un oggetto funzione unario associando il primo argomento della funzione binaria a un valore specificato. |
|
Una classe modello che fornisce un costruttore che converte un oggetto funzione binario in un oggetto funzione unario associando il secondo argomento della funzione binaria a un valore specificato. |
|
Una classe di adattatori che consente a una funzione membro const che non accetta argomenti di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di riferimento. |
|
Una classe di adattatori che consente a una funzione membro const che non accetta argomenti di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di un puntatore. |
|
Una classe di adattatori che consente a una funzione membro const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di riferimento. |
|
Una classe di adattatori che consente a una funzione membro const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di un puntatore. |
|
Classe che esegue il wrapping di un oggetto chiamabile. |
|
Classe che calcola un codice hash per un valore. |
|
Classe che consente di verificare se un particolare tipo viene generato chiamando bind. |
|
Una classe che consente di verificare se un particolare tipo è un placeholder. |
|
Una classe di adattatori che consente a una funzione membro non_const che non accetta argomenti di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di riferimento. |
|
Una classe di adattatori che consente a una funzione membro non_const che non accetta argomenti di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di un puntatore. |
|
Una classe di adattatori che consente a una funzione membro non_const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di riferimento. |
|
Una classe di adattatori che consente a una funzione membro non_const che accetta un singolo argomento di chiamare gli operatori come oggetto funzione unario una volta inizializzata con un argomento di un puntatore. |
|
Converte un puntatore a funzione binario in funzione binaria adattabile. |
|
Converte un puntatore a funzione unario in funzione unaria adattabile. |
|
Una classe che incapsula un riferimento. |
|
Una struttura che utilizza il tipo restituito di un oggetto richiamabile di cui effettua il wrapping. |
|
Una classe modello che fornisce una funzione membro che nega il valore restituito di una funzione unaria specificata. |
Funzioni
Associa gli argomenti a un oggetto richiamabile. |
|
Una funzione di supporto del modello che crea un adattatore per convertire un oggetto funzione binario in un oggetto funzione unario associando il primo argomento della funzione binaria a un valore specificato. |
|
Una funzione di supporto del modello che crea un adattatore per convertire un oggetto funzione binario in un oggetto funzione unario associando il secondo argomento della funzione binaria a un valore specificato. |
|
Restituisce il logico AND bit per bit (operatore& binario) dei due parametri. |
|
Restituisce il complemento logico bit per bit (operator~) del parametro. |
|
Restituisce il logico OR bit per bit (operatore |) dei due parametri. |
|
Restituisce il logico XOR bit per bit (operatore ^) dei due parametri. |
|
Costruisce un reference_wrapper const da un argomento. |
|
Genera una semplice chiamata wrapper. |
|
Funzioni di supporto del modello utilizzato per costruire gli adattatori dell'oggetto funzione per funzioni membro una volta inizializzata con gli argomenti del puntatore. |
|
Una funzione di supporto del modello utilizzato per costruire gli adattatori dell'oggetto funzione per funzioni membro una volta inizializzata con i riferimenti del puntatore. |
|
Restituisce il complemento di un predicato unario. |
|
Restituisce il complemento di un predicato binario. |
|
Una funzione di supporto del modello utilizzata per convertire i puntatori a funzione unari e binari rispettivamente in funzioni adattabili unarie e binarie. |
|
Costruisce un reference_wrapper da un argomento. |
|
Scambia due oggetti function. |
Strutture
Una classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione binario. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di divisione sugli elementi di un tipo di valore specificato. |
|
Un predicato binario che verifica se un valore di un tipo specificato equivale a un altro valore di quel tipo. |
|
Un predicato binario che verifica se un valore di un tipo specificato è maggiore a un altro valore di quel tipo. |
|
Un predicato binario che verifica se un valore di un tipo specificato è maggiore o uguale a un altro valore di quel tipo. |
|
Un predicato binario che verifica se un valore di un tipo specificato è minore a un altro valore di quel tipo. |
|
Un predicato binario che verifica se un valore di un tipo specificato è minore o uguale a un altro valore di quel tipo. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione di congiunzione logica sugli elementi di un tipo di valore specificato e per verificare la verità o la falsità del risultato. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione di negazione logica sugli elementi di un tipo di valore specificato e per verificare la verità o la falsità del risultato. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione di disgiunzione logica sugli elementi di un tipo di valore specificato e per verificare la verità o la falsità del risultato. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di sottrazione sugli elementi di un tipo di valore specificato. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica del modulo sugli elementi di un tipo di valore specificato. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica della moltiplicazione sugli elementi di un tipo di valore specificato. |
|
La classe fornisce un oggetto funzione già definita che restituisce il segno meno di un valore dell'elemento. |
|
Un predicato binario che verifica se un valore di un tipo specificato non equivale a un altro valore di quel tipo. |
|
La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di addizione sugli elementi di un tipo di valore specificato. |
|
Una classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione unario. |
Oggetti
Segnaposto per argomenti sostituibili. |
Operatori
Impedisce il confronto di uguaglianza di oggetti richiamabili. |
|
Impedisce il confronto di disuguaglianza di oggetti richiamabili. |
Vedere anche
Riferimenti
Sicurezza dei thread nella libreria standard C++