Wie Prädikat als Funktionsparameter übergeben wird

8

Ich habe eine Klasse CMyVector , die einen Vektor von Zeigern auf CMyClass Objekte enthält und ich habe mehrere "find" -Funktionen, um Elemente nach verschiedenen Kriterien zu finden. So habe ich zum Beispiel:

%Vor%

Zuerst wurden sie als Schleifen implementiert, die den Vektor durchlaufen und nach dem Element suchen, das zu X, str, ptr oder was auch immer passt. Also habe ich Prädikate wie dieses erstellt:

%Vor%

Und endete mit einer Reihe von Funktionen, die alle so aussehen:

%Vor%

Sie sehen alle gleich aus, mit Ausnahme des Prädikats, das aufgerufen wird. Daher habe ich mir überlegt, mehr zu vereinfachen und eine Funktion wie diese erstellt:

%Vor%

Und tun:

%Vor%

Und so weiter.

Meine Frage ist also: Wie soll ich meine Find -Funktion deklarieren, damit ich meine Prädikate weitergeben kann? Ich habe mehrere Möglichkeiten ausprobiert, aber bisher ohne Erfolg.

    
MikMik 05.12.2011, 15:25
quelle

1 Antwort

10

Verwenden Sie die Vorlage, um den Typ aufzunehmen, den Sie benötigen

%Vor%

Sie könnten immer auch std :: function (c ++ 11)

verwenden %Vor%

Persönlich bevorzuge ich die oberste, weil es für den Compiler wahrscheinlich einfacher ist zu optimieren, da es weniger Umleitung gibt. und wenn der Anruf eindeutig ist, kann es inline werden.

EDIT: Es ist auch erwähnenswert, dass, wenn Sie mit der Vorlage Option gehen, Sie die Implementierung in der Header-Datei bereitstellen müssen, kann dies ein Schmerz sein. Während die std :: -Funktion in der Quelldatei (.cpp) mit allen anderen Implementierungen existieren kann.

    
111111 05.12.2011, 15:29
quelle

Tags und Links