аудио — Объясните код C ++ из Superpowered CrossExample для Android

Этот код встречается в CrossExample от 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)

1

Решение

clientData передается как void pointer, Позже, это приведено к pointer to pointer типа SuperpoweredAdvancedAudioPlayer, Я полагаю, что clientData был такого типа, прежде чем передать его в функцию, поэтому необходимо приведение. Я не знаю почему это void* используется вместо SuperpoweredAdvancedAudioPlayer**, Не хорошо, но не редко.

Вар по имени playerA указатель на объект типа SuperpoweredAdvancedAudioPlayer, Разыменовав указатель на указатель, вы получите указатель на SuperpoweredAdvancedAudioPlayer объект того же типа, что и playerA,

Обратите внимание, что playerAобъявляется только внутри блока if, его жизнь заканчивается там. Есть другой playerA вне блока, который должен быть объявлен перед назначением его чему-либо.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]