Это может быть довольно шумный вопрос, но я не смог разобраться в этом сам.Доступ к внешнему контексту в lambdas
Итак, я пытаюсь передать лямбда в следующей функции:
wiringPiISR(int pin, int mode, void (*function)())
... какие результаты в этом:
wiringPiISR(Pin::BELL, INT_EDGE_RISING, [] {});
... и, кажется, работает, так что я очевидно, может использовать лямбда вместо того, чтобы указывать на функцию.
Но то, что я на самом деле хочу сделать что-то подобное, с захватом this
для доступа к функции onInterrupt(Pin pin)
во внешнем контексте:
wiringPiISR(Pin::BELL_1, INT_EDGE_RISING, [this] {
onInterrupt(Pin::BELL_1);
});
wiringPiISR(Pin::BELL_2, INT_EDGE_RISING, [this] {
onInterrupt(Pin::BELL_2);
});
..., что приводит это сообщение об ошибке:
No matching function for call to wiringPiISR
Я не очень разбираюсь в использовании C++ - lambdas, я знаю закрытие от многих других языков, но очевидно, что они работают по-разному в C++. Этот захват, похоже, модифицирует подпись закрытия, но я не знаю, как это исправить, или даже если есть возможное решение, не указывая на «фактическую» функцию.
Спасибо заранее
Я предполагаю, что 'onInterrupt' является членом. Поэтому я предлагаю вам попробовать 'this-> onInterrupt (...)'. Я видел подобное поведение, когда компилятор не смог скомпилировать его без явного 'this->'. –
Нет, это ничего не меняет, я уже пробовал это. Похоже, что 'wiringPiISR' не принимает это закрытие, если я правильно интерпретирую сообщение об ошибке. – andreaspfurtscheller
Извините, не заметил указателя функции в первом чтении. Это немного меняет ситуацию (на самом деле даст ответ). –