C ++传递类方法作为参数

时间:2017-09-17 17:32:42

标签: c++ arduino esp8266 esp32

我正在使用ESP32。目前我正在从ESP8266代码库迁移我的库。

我目前正在做以下事情:

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)

我无法弄清楚如何使用新签名来做到这一点。

1 个答案:

答案 0 :(得分:2)

由于普通函数指针不能绑定到成员函数,基本上只剩下三个选择:可以将CL :: callbackHandler声明为静态成员函数,使其成为自由函数或使用lambda表达式(不带闭包) ,像

m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) {
    // handling the event
});