मैं ESP-32 पर C ++ का उपयोग करता हूं। टाइमर रजिस्टर करते समय मुझे यह करना होगा:
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);
इसलिए विधि को एक अलग कार्य में शुरू किया गया है।
जीसीसी हमेशा मुझे इन रूपांतरणों के बारे में चेतावनी देता है, लेकिन यह योजनाबद्ध तरीके से काम करता है।
क्या यह उत्पादन कोड में स्वीकार्य है? क्या ऐसा करने के लिए इससे अच्छा तरीका है?
std::bind
पहली विधि तर्क के रूप में ऑब्जेक्ट पॉइंटर को भी नहीं मानता है?