Eu uso C ++ no ESP-32. Ao registrar um timer, tenho que fazer o seguinte:
timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback);
timer_args.arg = this;
Aqui o timer chama soundCallback
.
E a mesma coisa ao registrar uma tarefa:
xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle);
Portanto, o método é iniciado em uma tarefa separada.
O GCC sempre me alerta sobre essas conversões, mas funciona da maneira planejada.
É aceitável no código de produção? Existe uma maneira melhor de fazer isso?
std::bind
Também não assume o ponteiro de objeto como primeiro argumento de método?