Hier ist die Lösung, wenn Sie den hässlichen Funktion-Zeiger auf das Internet nicht haben zu lesen, -Mitgliedsyntax:
auto err1 = [](test& t) { return t.error(); };
auto err2 = [](test& t, int x) { return t.error(x); };
Beachten Sie, dass Sie bis jetzt Schließungen als Typen und keine Funktionszeiger erhalten. Wenn Sie Funktionszeiger verwenden möchten, die nützlich sind, wenn Sie verschiedene Elementfunktionen mit derselben Signatur in einem Array speichern möchten, können Sie den Abschluss über +
(siehe here) an einen (normalen) Funktionszeiger übergeben.
Soweit ich im Moment sehen kann, mit dem oben genannten können Sie konzeptionell alles tun, was Sie tun können mit Funktion-zu-Mitglied-Zeiger - außer natürlich Aufruf einer Routine, die genau einen solchen Zeiger benötigt. Und es ist viel schöner.
Lieber Herr, das ist hässlich. – cat
Jedes Mal, wenn ich C++ - Syntax sehe, verspüre ich den Drang, in Haskell etwas zu schreiben - irgendwas. – ApproachingDarknessFish