Condividi tramite


Oggetti funzione

In oggetto funzione, o functor, è qualsiasi tipo che implementa l'operatore ().Questo operatore viene definito operatore di chiamata o talvolta operatore di applicazione.La libreria di modelli standard utilizza gli oggetti funzione principalmente come criteri di ordinamento per i contenitori e gli algoritmi.

Gli oggetti funzione forniscono due vantaggi principali rispetto a una chiamata di funzione retta.Il primo consiste nel fatto che un oggetto funzione può contenere lo stato.Il secondo è che un oggetto funzione è un tipo e pertanto può essere utilizzato come parametro di modello.

creare un oggetto funzione

Per creare un oggetto funzione, creare un tipo e implementare l'operatore (), ad esempio:

class Functor
{
public:
    int operator()(int a, int b)
    {
        return a < b;
    }
};

int main()
{
    Functor f;
    int a = 5;
    int b = 7;
    int ans = f(a, b);
}

L'ultima riga di main viene illustrato come funzione chiama l'oggetto funzione.È riportato un esempio di questa chiamata a una chiamata a una funzione, ma in realtà è un operatore chiamante () del tipo di Functor.Questa somiglianze tra chiamare un oggetto funzione e una funzione è come oggetto funzione di ritardo è succeduto.

oggetti funzione e contenitori

La libreria di modelli standard contiene diversi oggetti funzione in <functional> file di intestazione.Un utilizzo di questi oggetti funzione è la chiave di ordinamento per contenitori.Ad esempio, set il contenitore viene dichiarato come segue:

template <
    class Key,
    class Traits=less<Key>,
    class Allocator=allocator<Key> >
class set

il secondo argomento di modello è l'oggetto funzione less.Restituzione di questo oggetto funzione true se il primo parametro passato è minore del secondo parametro passato.Da alcuni contenitori ordinare i relativi elementi, il contenitore consente di confrontare due elementi e l'utilizzo dell'oggetto funzione.È possibile definire per contenere i criteri di ordinamento per i contenitori creando un oggetto funzione e specificandolo nell'elenco di modelli per il contenitore.

oggetti funzione e algoritmi

Un altro utilizzo degli oggetti funzionale è negli algoritmi.Ad esempio, remove_if l'algoritmo viene dichiarato come segue:

template<class ForwardIterator, class Predicate>
    ForwardIterator remove_if(
        ForwardIterator _First,
        ForwardIterator _Last,
        Predicate _Pred
    );

l'ultimo argomento a remove_if è un oggetto funzione che restituisce un valore booleano (a predicato).Se il risultato dell'oggetto funzione è true, quindi l'elemento viene rimosso dal contenitore a cui si accede dagli iteratori _First e _Last.È possibile utilizzare qualsiasi oggetto funzione dichiarati in <functional> intestazione per l'argomento _Pred oppure è possibile creare diventi proprietaria.

Vedere anche

Riferimenti

Libreria di modelli standard