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.