Freigeben über


Funktionsobjekte

Ein Funktionsobjektoder Funktionselement, wird jeder Typ, der Operator implementiert ().Dieser Operator wird als der Aufruf der Anwendungmanchmal oder Operator "Operator ".Die Standardvorlagenbibliothek primär als Funktionsobjekte verwendet kriterien Sortierung für Container und Algorithmen.

Funktionsobjekte stellen zwei wesentliche Vorteile gegenüber einem geraden Funktionsaufruf.Die erste besteht darin, dass ein Funktionsobjekt Zustand enthalten kann.Das zweite besteht darin, dass ein Funktionsobjekt einen Typ darstellt und daher als Vorlagenparameter verwendet werden kann.

Ein Funktionsobjekt erstellen

Um ein Funktionsobjekt zu erstellen, erstellen Sie einen Typ und implementieren Sie Operator (), z. B.:

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);
}

Die letzte Zeile der main-Funktion zeigt, wie Sie das Funktionsobjekt aufrufen.Dieser Aufruf sieht wie ein Aufruf einer Funktion ausgeführt. Es ist jedoch tatsächlich aufrufenden Operator (Funktionselement) des Typs.Durch diese Ähnlichkeit zwischen dem Aufrufen eines Funktionsobjekts und der Funktion ist, z. B. das geschah funktionsobjekt Ausdruck.

Funktionsobjekte und Container

Die Standardvorlagenbibliothek enthält verschiedene Funktionsobjekte in der <functional> Headerdatei.Ein Verwendung dieser Funktionsobjekten ist als Container für kriterium sortieren.Beispielsweise wird der set Container deklariert wie folgt:

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

Das zweite Vorlagenargument ist das Funktionsobjekt less.Dieses Funktionsobjekt gibt true , wenn der erste Parameter, der an ihn übergebene kleiner ist als der übergebene zweite Parameter zurück.Beim Sortieren mehrerer Container, deren Elemente der Container eine Methode des Vergleichs von zwei Elementen erforderlich ist und diese mithilfe des Funktionsobjekts erreicht.Sie können definieren, kriterien Sortierung für Container verfügen, indem Sie ein Funktionsobjekt erstellen und es in der Vorlagenliste für den Container angeben.

Funktionsobjekte und Algorithmen

Ein weiterer Verwendung funktionaler Objekte sind in den Algorithmen.Beispielsweise wird der Algorithmus remove_if deklariert wie folgt:

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

Das letzte Argument an remove_if ist ein Funktionsobjekt, der einen booleschen Wert zurückgibt (ein Prädikat).Wenn das Ergebnis des Funktionsobjekts trueist, wird das Element aus dem Container entfernt, der von der Iteratoren _First und _Lastzugegriffen wird.Sie können alle Funktionsobjekte verwenden, die im <functional> Header für das Argument _Pred deklariert werden. Sie können auch zu erstellen.

Siehe auch

Referenz

Standardvorlagenbibliothek