Я работаю с 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 как статическую функцию-член, сделать ее свободной функцией или использовать лямбда-выражение (без замыканий), например
m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) {
// handling the event
});
Других решений пока нет …