Condividi tramite


<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

bad_function_call

Una classe che descrive l'eccezione generata per indicare che una chiamata a operator() su un oggetto funzione è fallita perché l'oggetto è vuoto.

binary_negate

Una classe modello che fornisce una funzione membro che nega il valore restituito di una funzione binaria specificata.

binder1st

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.

binder2nd

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.

const_mem_fun_ref_t

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.

const_mem_fun_t

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.

const_mem_fun1_ref_t

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.

const_mem_fun1_t

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.

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

Una classe che consente di verificare se un particolare tipo è un placeholder.

mem_fun_ref_t

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.

mem_fun_t

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.

mem_fun1_ref_t

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.

mem_fun1_t

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.

pointer_to_binary_function

Converte un puntatore a funzione binario in funzione binaria adattabile.

pointer_to_unary_function

Converte un puntatore a funzione unario in funzione unaria adattabile.

reference_wrapper

Una classe che incapsula un riferimento.

result_of

Una struttura che utilizza il tipo restituito di un oggetto richiamabile di cui effettua il wrapping.

unary_negate

Una classe modello che fornisce una funzione membro che nega il valore restituito di una funzione unaria specificata.

Funzioni

bind

Associa gli argomenti a un oggetto richiamabile.

bind1st

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.

bind2nd

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.

bit_and

Restituisce il logico AND bit per bit (operatore& binario) dei due parametri.

bit_not

Restituisce il complemento logico bit per bit (operator~) del parametro.

bit_or

Restituisce il logico OR bit per bit (operatore |) dei due parametri.

bit_xor

Restituisce il logico XOR bit per bit (operatore ^) dei due parametri.

cref

Costruisce un reference_wrapper const da un argomento.

mem_fn

Genera una semplice chiamata wrapper.

mem_fun

Funzioni di supporto del modello utilizzato per costruire gli adattatori dell'oggetto funzione per funzioni membro una volta inizializzata con gli argomenti del puntatore.

mem_fun_ref

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.

not1

Restituisce il complemento di un predicato unario.

not2

Restituisce il complemento di un predicato binario.

ptr_fun

Una funzione di supporto del modello utilizzata per convertire i puntatori a funzione unari e binari rispettivamente in funzioni adattabili unarie e binarie.

ref

Costruisce un reference_wrapper da un argomento.

scambio

Scambia due oggetti function.

Strutture

binary_function

Una classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione binario.

divide

La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di divisione sugli elementi di un tipo di valore specificato.

equal_to

Un predicato binario che verifica se un valore di un tipo specificato equivale a un altro valore di quel tipo.

greater

Un predicato binario che verifica se un valore di un tipo specificato è maggiore a un altro valore di quel tipo.

greater_equal

Un predicato binario che verifica se un valore di un tipo specificato è maggiore o uguale a un altro valore di quel tipo.

less

Un predicato binario che verifica se un valore di un tipo specificato è minore a un altro valore di quel tipo.

less_equal

Un 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 per verificare la verità o la falsità del risultato.

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 per verificare la verità o la falsità del risultato.

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 per verificare la verità o la falsità del risultato.

minus

La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica di sottrazione sugli elementi di un tipo di valore specificato.

modulus

La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica del modulo sugli elementi di un tipo di valore specificato.

multiplies

La classe fornisce un oggetto funzione predefinito che esegue l'operazione aritmetica della moltiplicazione sugli elementi di un tipo di valore specificato.

negate

La classe fornisce un oggetto funzione già definita che restituisce il segno meno di un valore dell'elemento.

not_equal_to

Un 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

Una classe base vuota che definisce i tipi che possono essere ereditati da una classe derivata che fornisce un oggetto funzione unario.

Oggetti

_1.._M

Segnaposto per argomenti sostituibili.

Operatori

operatore==

Impedisce il confronto di uguaglianza di oggetti richiamabili.

operatore!=

Impedisce il confronto di disuguaglianza di oggetti richiamabili.

Vedere anche

Riferimenti

Sicurezza dei thread nella libreria standard C++

Libreria di modelli standard

Altre risorse

<funzionale> membri

File di intestazione libreria standard C++