arduino — метод передачи класса C ++ в качестве параметра

Я работаю с 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)

Я не могу понять, как это сделать с новой подписью.

0

Решение

Поскольку простые указатели на функции не могут быть связаны с функциями-членами, у вас в основном остается три варианта: вы можете объявить CL :: callbackHandler как статическую функцию-член, сделать ее свободной функцией или использовать лямбда-выражение (без замыканий), например

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]