Я пытаюсь следовать руководству this, чтобы узнать, как использовать клиент Socket.IO CPP на QT. То, что я не понимаю, это одна из этих линий:Пример клиента CPP-приложения Socket.IO (использование std :: bind)
auto onm = std::bind(onMessage, _1, _2, _3, _4);
h.socket()->on("message", onm);
который должен вызвать эту функцию:
void OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp)
Я понимаю, что std::bind(&MainWindow::OnNewMessage
этого имени функции и _1,_2,_3,_4
являются std::placeholder
объектами но я не понимаю, почему принят второй аргумент this
.
ОБНОВЛЕНИЕ: Я возился с кодом немного, переехал метод onNewMessage
снаружи в глобальной области (обновленный код, указанный выше). Я столкнулся с этой ошибкой:
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);
^
Так что я проверил метод декларации on
:
void socket::on(std::string const& event_name,event_listener_aux const& func)
А вот декларация event _listener_aux
в отдельном файле заголовка в классе socket
сам:
typedef std::function<void(const std::string& name,message::ptr const& message,bool need_ack, message::list& ack_message)> event_listener_aux;
TIA
Ваша проблема не имеет ничего общего с программированием сокетов, но как предполагается, что 'std :: bind' используется при вызове нестатической функции-члена. Если вы изменили название своего сообщения, вы наверняка получили бы ответ гораздо раньше. – PaulMcKenzie
См. [Документация и пример программы] (http://en.cppreference.com/w/cpp/utility/functional/bind) – PaulMcKenzie
@PaulMcKenzie Я видел пример программы, и они делают это без классов для 'f1'. Вот что меня смущает. –