2016-07-12 6 views
0

Ich bin auf GCC 4.4 fest, so trotz der Einführung -std=c++0x zu meiner Codebasis haben keine Verwendung von Lambdas.Kann ich ein leeres Lambda mit C++ 03 Standard-Bibliotheksfunktionen simulieren?

Gibt es ein C++ 03-Äquivalent zu einem leeren Lambda [](){}, das ich sicher als Standardargument für ein generisches Argument mit einem Typ Callback verwenden könnte?

Ich frage, weil die alten std::plus, std::less usw. handlich waren, aber ich kann nicht scheinen, ein no-op zu finden, void-Äquivalent zurückgebend.

+1

Ich würde versuchen, von GCC 4.4 loszukommen; Ich bin mir sicher, dass Sie GCC 6 aus dem Quellcode kompilieren könnten. –

+3

Was ist eigentlich falsch daran, selbst zu rollen? –

+0

Wenn Sie eine STL-Funktion möchten, was ist mit einem unsinnigen 'std :: swap'? –

Antwort

5
struct noop { 
    static void do_nothing(){}; 
    void operator()()const{}; 
    typedef void(*pf)(); 
    operator pf()const { return do_nothing; } 
}; 

noop() ist ziemlich gleichwertig [](){}.

Es konvertiert sogar zu Funktionszeiger wie das Noop Lambda tut.

+0

Ich mache das; Zugegebenermaßen war meine Frage nicht klar, aber ich habe auf etwas in der stdlib gehofft, um das nicht definieren zu müssen. –

+1

Obwohl, wenn ich "das" sage, nicht ganz "das"; Meine ist nur ein blutiger Funktionszeiger. Dies ist viel besser dank Inline Yay –

+0

@light Ich meine, wir könnten1st 0 zu weniger zweimal binden, aber warum? Es würde ungefähr so ​​viele Zeichen enthalten, dass das Feature "convert-to-function ptr" nicht vorhanden wäre und mehr Arbeit vom Optimierer benötigt würde, um es zu eliminieren. – Yakk

Verwandte Themen