Я використовую C ++ на ESP-32. При реєстрації таймера я повинен це зробити:
timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback);
timer_args.arg = this;
Тут таймер дзвонить soundCallback
.
І те ж саме при реєстрації завдання:
xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle);
Тож метод запускається в окремому завданні.
GCC завжди попереджає мене про ці перетворення, але це працює так, як планувалося.
Чи прийнятний це у виробничому коді? Чи є кращий спосіб зробити це?
std::bind
передбачається також вказівник об'єкта в якості першого аргументу методу?