Как использовать ссылку «this» в лямбда-функции и при этом соответствовать определению библиотеки MQTT-TLS - PullRequest
0 голосов
/ 08 марта 2019

Я передаю лямбда-функцию в качестве обратного вызова в библиотеку 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 ++ еще.Много мелочей на этом языке.

...