C++ 将 class 方法作为参数传递
C++ pass class method as parameter
我正在使用 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)
我不知道如何使用新签名。
由于普通函数指针不能绑定到成员函数,你基本上只剩下三个选择:你可以将 CL::callbackHandler 声明为静态成员函数,使其成为自由函数或使用 lambda 表达式 (没有闭包),如
m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) {
// handling the event
});
我正在使用 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)
我不知道如何使用新签名。
由于普通函数指针不能绑定到成员函数,你基本上只剩下三个选择:你可以将 CL::callbackHandler 声明为静态成员函数,使其成为自由函数或使用 lambda 表达式 (没有闭包),如
m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) {
// handling the event
});