我目前正在做以下工作:
m_pubSubClient.setCallback( std::bind(&CL::callbackHandler, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
但似乎PubSubClient库的作者已经更改了签名。
// old #define MQTT_CALLBACK_SIGNATURE std::function<void(char*, uint8_t*, unsigned int)> callback //new #define MQTT_CALLBACK_SIGNATURE void (*callback)(char*, uint8_t*, unsigned int)
由于普通函数指针不能绑定到成员函数,因此基本上只剩下三个选择:可以将CL::callbackHandler声明为静态成员函数,使其成为自由函数或使用lambda表达式(不带闭包),如
m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) { // handling the event });