Worauf kommt es in diesem Muster an: Verwenden einer Struktur, die eine einzelne Methode enthält

8

In unserem Code haben wir einige Fälle dieses Musters:

%Vor%

Was ist der Vorteil davon vorbei:

%Vor%     
Ant 28.05.2009, 16:20
quelle

2 Antworten

4

Es ist ein Optimierungsschritt für Vorlagenprädikate.

Es geht nicht darum, dass ein Funktor einfacher zu benutzen ist als eine Funktion. Beide funktionieren in Boost- und STL-Kontexten genauso.

Sie unterscheiden sich in der Template-Instantiierung.

Stellen Sie sich eine triviale Template-Funktion vor, die ein Prädikat erfordert

%Vor%

Mit einer Funktion wird eine Vorlageninstanz mit einem Funktionszeiger instanziiert.

%Vor%

Mit einem Funktor wird eine Vorlageninstanz mit einem spezifischen Funktortyp instanziiert.

%Vor%

Mit dem Funktor ist die spezifische Funktionalität nun gut definiert und die übergebene Struktur wird wahrscheinlich nicht verwendet und kann optimiert werden.

    
Drew Dormann 28.05.2009, 18:17
quelle
16

Eine Struktur mit einem Operator () wird oft als Funktor bezeichnet, der effektiv als "Funktionsobjekt" fungiert. Sie können diese Funktoren mit vielen APIs, insbesondere der STL, einfacher und robuster verwenden als mit typischen Funktionszeigern. Functors sind Objekte, sie können den Status enthalten und während der Konstruktion parametrisiert werden, um einen eigenständigen spezialisierten Handler zu erstellen.

Ich nehme an, dass Sie oft Code in outwardClass haben, der diese Bibliotheksfunktionen verwenden möchte (d. h. std :: for_each) und dieses Muster so entwickelt hat, dass es trivial wird. Wenn Sie Funktoren nie verwenden, dann ist diese Syntax sinnlos und schwer zu lesen (und kann ersetzt werden, wie Sie vorschlagen).

Bearbeiten: Vielleicht möchten Sie Frage 317450 , über operator ().

    
Adam Wright 28.05.2009 16:22
quelle

Tags und Links