Wie kann man die überladene Funktion einer gegebenen Signatur in std :: bind anzeigen?

7

Ich habe eine API-Funktion f_api(std::function<void(int)> func) und jetzt habe ich meine Prozessklasse

%Vor%

und ich möchte Func f f (int i) verwenden, um die Arbeit an f_api zu übergeben; also verwende ich std :: bind

%Vor%

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.

    
Liu Weibo 03.08.2017, 11:01
quelle

2 Antworten

15

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:

%Vor%     
StoryTeller 03.08.2017 11:03
quelle
10

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.

%Vor%

oder noch besser, weisen Sie einfach f dem std::function

zu %Vor%     
Dave S 03.08.2017 11:07
quelle

Tags und Links