Betrachten Sie Folgendes:
%Vor% Der obige Code kann den Effekt von is_odd()
nicht negieren, da es sich um eine Memberfunktion handelt. Der Aufruf von std::ptr_fun()
schlägt fehl.
Wie mache ich es zum Arbeiten? Bitte beachten Sie, dass is_odd()
eine nicht statische Elementfunktion sein soll.
Es gibt mehrere Probleme bei der Verwendung von A::is_odd(int)
als unäres Prädikat, insbesondere wenn es mit std::not1()
verwendet werden muss:
A::is_odd(int)
benötigt zwei Argumente: das implizite Objekt (" this
") und das sichtbare int
-Argument. argument_type
und result_type
definiert. Wenn Sie diese Memberfunktion ordnungsgemäß als unäres Prädikat verwenden, müssen Sie zwei Schritte ausführen:
std::mem_*fun
-Funktion. std::bind1st()
. Mit einem C ++ 11-Compiler sind die Dinge viel einfacher, weil std::bind()
sich um beide kümmert. Angenommen, es wird von einem Mitglied von A
verwendet:
Das Gleiche mit einem Pre-C ++ 11-Compiler ist etwas schwieriger. Die Verwendung in std::remove_if()
würde etwa so aussehen:
Machen Sie is_odd
static, so dass kein impliziter Parameter this
benötigt wird:
Es werden keine Elementvariablen oder andere Elementfunktionen verwendet.