Я пытаюсь реализовать задачу, которая вызывается внутри класса C ++, и ей требуется функция обратного вызова. Поскольку я довольно новичок в C ++ и хотя у меня есть грубое понимание указателей, это то, что я еще не мог понять:
Я использую TaskScheduler
Чтобы настроить все необходимое в классе, я хочу вызвать следующую функцию
Нормальные примеры для arduino не используют классы, и я изо всех сил пытаюсь заставить это работать в моем рефакторированном коде.
void Weather::setup(std::shared_ptr<Scheduler> s ,int id, String appid, uint32_t interval)
{
...
weatherTask(interval, TASK_FOREVER, &Weather::updateWeatherCallback, *scheduler, true);
}
функция updateWeatherCallback также реализована в этом классе:
void Weather::updateWeatherCallback() {...}
Помимо использования приведенного выше кода, я попробовал несколько лямбда-вариантов, предложенных здесь на Stackoverflow, и просто следующее:
weatherTask(interval,TASK_FOREVER, [this](){this->updateWeatherCallback;},*scheduler,true);
Но я подумал, что мое понимание этих ответов на Stackoverflow не очень хорошее - это больше проб и ошибок, что затрудняет поиск «правильных ответов»
Некоторые подробности из TaskScheduler-Library:
typedef void (*TaskCallback)();
class Task {
friend class Scheduler;
public:
INLINE Task(unsigned long aInterval=0, long aIterations=0, TaskCallback aCallback=NULL,
Scheduler* aScheduler=NULL, bool aEnable=false, TaskOnEnable aOnEnable=NULL,
TaskOnDisable aOnDisable=NULL);
...
Спасибо:)