C++ 解释C++;来自超级强大的Android CrossExample的代码
此代码出现在源中: 有人能帮我理解C++ 解释C++;来自超级强大的Android CrossExample的代码,c++,audio,signal-processing,superpowered,C++,Audio,Signal Processing,Superpowered,此代码出现在源中: 有人能帮我理解if语句中的第一行吗?特别是,我如何解释作业的右侧 *((SuperpoweredAdvancedAudioPlayer**)clientData)clientData作为无效指针传递。之后,它被转换为类型为超级强大的AdvancedAudioPlayer的指向指针的指针。在将其传递给函数之前,我认为clientData属于该类型,这就是为什么需要强制转换。我不知道为什么用这个void*来代替SuperpoweredAdvancedAudioPlayer**。不
if
语句中的第一行吗?特别是,我如何解释作业的右侧
*((SuperpoweredAdvancedAudioPlayer**)clientData)
clientData
作为无效指针传递。之后,它被转换为类型为超级强大的AdvancedAudioPlayer
的指向指针的指针。在将其传递给函数之前,我认为clientData
属于该类型,这就是为什么需要强制转换。我不知道为什么用这个void*
来代替SuperpoweredAdvancedAudioPlayer**
。不好,但也不少见
名为playerA
的变量是指向类型为SuperpoweredAdvancedAudioPlayer
的对象的指针。取消对指针的引用,您将得到一个指向SuperpoweredAdvancedAudioPlayer
对象的指针,其类型与playerA
相同。
请注意,playerA
仅在if块内声明,其生命终止于此。块外还有另一个playerA
,必须在将其分配给任何对象之前声明
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);