<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) quando f è un puntatore alla funzione membro di classe T e t1 è un oggetto di tipo T, un riferimento a un oggetto di tipo T o 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, un riferimento a un oggetto di tipo T o 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 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 di T.

  • Se T è un puntatore a una funzione membro, result_type è sinonimo del tipo restituito di T.

  • Se T è un tipo di classe con un membro di tipo result_type, result_type è sinonimo di T::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++