Я передаю лямбда-функцию в качестве обратного вызова в библиотеку MQTT-TLS.
Вот объявление конструктора класса MQTT-TLS:
MQTT(char* domain, uint16_t port, void (*callback)(char*,uint8_t*,unsigned int));
Я вызываю MQTT-TLS так:
void MQTTMsgs::init() {
char addr[] = "172.20.10.3";
this->mqttClient = new MQTT(addr, 1883, [](char* topic, byte* payload, unsigned int length) {
// inside callback
});
}
Этот код работает нормально.Компилирует и жизнь хороша.Но проблема в том, что мне нужен доступ к «этому» внутри обратного вызова.Итак, я добавляю «this» в качестве ссылки на лямбда-функцию следующим образом:
this->mqttClient = new MQTT(addr, 1883, [this](char* topic, byte* payload, unsigned int length) {
this->accessOtherPropsEtcEtc();
});
И вот где она выпадает.Я получаю эту ошибку при компиляции:
error: no matching function for call to 'MQTT::MQTT(char [12], int, MQTTMsgs::MQTTMsgs()::<lambda(char*, byte*, unsigned int
error: note: no known conversion for argument 3 from 'MQTTMsgs::MQTTMsgs()::<lambda(char*, byte*, unsigned int)>' to 'void (*)(char*, uint8_t*, unsigned int) {aka void (*)(char*, unsigned char*, unsigned int)}'
Мой вопрос таков: почему он прекрасно компилируется с лямбда-функцией, но выдает ошибку, когда эта же лямбда-функция передается в this в качестве ссылки?Я предполагаю, что каким-то образом компилятор g ++ устанавливает тип как MQTT вместо void или 'callback' (или что-то еще), и, следовательно, определение функции MQTT не соответствует ему.Просто не уверен, как это видит компилятор.Любые идеи о том, как я могу настроить это, чтобы соответствовать и работать с определением MQTT-TLS?
Все еще не владеет C ++ еще.Много мелочей на этом языке.