为 Android 解释 Superpowered CrossExample 中的 C++ 代码
Explain C++ code from Superpowered CrossExample for Android
此代码出现在 CrossExample from superpowered.com:
static void playerEventCallbackA(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void * __unused value) {
if (event == SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess) {
SuperpoweredAdvancedAudioPlayer *playerA = *((SuperpoweredAdvancedAudioPlayer **)clientData);
playerA->setBpm(126.0f);
playerA->setFirstBeatMs(353);
playerA->setPosition(playerA->firstBeatMs, false, false);
};
}
playerA = new SuperpoweredAdvancedAudioPlayer(&playerA , playerEventCallbackA, samplerate, 0);
playerA->open(path, fileAoffset, fileAlength);
任何人都可以帮助我理解 if
语句中的第一行吗?特别是,我如何解释作业的右侧?
*((SuperpoweredAdvancedAudioPlayer **)clientData)
clientData
作为 void pointer
传递。后来,它被转换为 SuperpoweredAdvancedAudioPlayer
类型的 pointer to pointer
。我 suposse clientData
在将它传递给函数之前是那种类型,这就是为什么需要强制转换的原因。我不知道为什么用这个void*
而不是SuperpoweredAdvancedAudioPlayer**
。不好,但也不罕见。
名为 playerA
的 var 是指向类型 SuperpoweredAdvancedAudioPlayer
的对象的指针。取消引用指向指针的指针,您将获得指向 SuperpoweredAdvancedAudioPlayer
对象的指针,与 playerA
的类型相同。
请注意 playerA
仅在 if 块内声明,它的生命到此结束。块外还有另一个 playerA
,必须在将其分配给任何东西之前声明。
此代码出现在 CrossExample from superpowered.com:
static void playerEventCallbackA(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void * __unused value) {
if (event == SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess) {
SuperpoweredAdvancedAudioPlayer *playerA = *((SuperpoweredAdvancedAudioPlayer **)clientData);
playerA->setBpm(126.0f);
playerA->setFirstBeatMs(353);
playerA->setPosition(playerA->firstBeatMs, false, false);
};
}
playerA = new SuperpoweredAdvancedAudioPlayer(&playerA , playerEventCallbackA, samplerate, 0);
playerA->open(path, fileAoffset, fileAlength);
任何人都可以帮助我理解 if
语句中的第一行吗?特别是,我如何解释作业的右侧?
*((SuperpoweredAdvancedAudioPlayer **)clientData)
clientData
作为 void pointer
传递。后来,它被转换为 SuperpoweredAdvancedAudioPlayer
类型的 pointer to pointer
。我 suposse clientData
在将它传递给函数之前是那种类型,这就是为什么需要强制转换的原因。我不知道为什么用这个void*
而不是SuperpoweredAdvancedAudioPlayer**
。不好,但也不罕见。
名为 playerA
的 var 是指向类型 SuperpoweredAdvancedAudioPlayer
的对象的指针。取消引用指向指针的指针,您将获得指向 SuperpoweredAdvancedAudioPlayer
对象的指针,与 playerA
的类型相同。
请注意 playerA
仅在 if 块内声明,它的生命到此结束。块外还有另一个 playerA
,必须在将其分配给任何东西之前声明。