Używam C ++ na ESP-32. Przy rejestracji timera muszę to zrobić:
timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback);
timer_args.arg = this;
Tutaj dzwoni zegar soundCallback
.
I to samo podczas rejestracji zadania:
xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle);
Tak więc metoda jest uruchamiana w oddzielnym zadaniu.
GCC zawsze ostrzega mnie przed tymi konwersjami, ale działa tak, jak zaplanowano.
Czy jest to dopuszczalne w kodzie produkcyjnym? Czy jest na to lepszy sposób?
std::bind
zakłada również wskaźnika obiektu jako argumentu pierwszej metody?