Ich habe eine API-Funktion f_api(std::function<void(int)> func)
und jetzt habe ich meine Prozessklasse
und ich möchte Func f
f (int i) verwenden, um die Arbeit an f_api zu übergeben; also verwende ich std :: bind
aber hier das Problem, wie kann ich angeben, welche Func::operator()()
möchte ich binden? Ich kann eine Member-Funktion mit ihrem Namen angeben, aber wie kann ich dies tun, wenn diese Member-Funktion mehrere verschiedene signierte Reload-Funktionen hat? Will std :: bind finde mich die am besten geeignete Funktion, die aufgerufen werden soll? C ++ ist so kompliziert .....
der minimal nachweisbare Fall:
%Vor%der Kompilierungsfehler:
%Vor% Und in meinem Fall ist es ein bisschen anders, weil mein class Func
nicht zugewiesen werden kann, weil ein Mitgliedsfeld dieser Klasse nicht zuweisbar ist, daher werde ich während der Kompilierzeit einen etwas anderen Fehler bekommen.
Sie können es für alle Überbelastungen auf die unangenehme Weise tun. Durch Casting:
%Vor% Alternativ könnten Sie erkennen, dass std::bind
nicht besonders nützlich ist, wenn Sie Lambdas haben:
Func ist ein Funktionsobjekt. Anstatt den member-function-Zeiger zu übernehmen, übergeben Sie einfach das gesamte zu bindende Objekt und lassen Sie es auflösen, wenn Sie die Bindung verwenden, oder in diesem Fall, wenn Sie es zu std::function
hinzufügen.
oder noch besser, weisen Sie einfach f dem std::function