Ich versuche, this Guide zu folgen, um zu lernen, Socket.IO CPP-Client auf QT zu verwenden. Was ich nicht verstehe, ist eine dieser Linien:Socket.IO CPP-Client-Beispiel (Verwendung von Std :: Bind)
auto onm = std::bind(onMessage, _1, _2, _3, _4);
h.socket()->on("message", onm);
Welche soll diese Funktion aufzurufen:
void OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp)
Ich verstehe, dass std::bind(&MainWindow::OnNewMessage
ist der Name der Funktion und _1,_2,_3,_4
sind die std::placeholder
Objekte aber was ich nicht verstehe ist, warum das zweite Argument this
übergeben wird.
UPDATE: ich mit dem Code gebastelt ein wenig, bewegt die onNewMessage
Methode außerhalb in globalen Bereich (den oben stehenden Code aktualisiert). Ich lief in diesen Fehler:
void socket::on(std::string const& event_name,event_listener_aux const& func)
Und hier ist die Erklärung von event _listener_aux
in einer separaten Header-Datei in der Klasse socket
selbst:
typedef std::function<void(const std::string& name,message::ptr const& message,bool need_ack, message::list& ack_message)> event_listener_aux;
no matching function for call to
'sio::socket::on(const char [8], std::_Bind<void (*(std::_Placeholder<1>,
std::_Placeholder<2>, std::_Placeholder<3>, std::_Placeholder<4>)
)(const std::__cxx11::basic_string<char>&,
const std::shared_ptr<sio::message>&, bool, std::shared_ptr<sio::message>&)>&)'
h.socket()->on("message", onm);
^
So ich die Methode Erklärung on
geprüft
TIA
Ihr Problem hat nichts mit der Socket-Programmierung zu tun, aber wie 'std :: bind' verwendet werden soll, wenn eine nicht-statische Member-Funktion aufgerufen wird. Wenn Sie den Titel Ihres Beitrags geändert hätten, hätten Sie sicherlich viel schneller eine Antwort erhalten. – PaulMcKenzie
Siehe [Dokumentation und Beispielprogramm] (http://en.cppreference.com/w/cpp/utility/functional/bind) – PaulMcKenzie
@PaulMcKenzie Ich sah das Beispielprogramm und sie tun es ohne Klassen für 'f1'. Das verwirrt mich. –