【问题标题】:Explain C++ code from Superpowered CrossExample for Android解释来自 Superpowered CrossExample for Android 的 C++ 代码
【发布时间】:2016-12-16 01:22:36
【问题描述】:

此代码出现在来自superpowered.comCrossExample 中:

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)

【问题讨论】:

    标签: c++ audio signal-processing superpowered


    【解决方案1】:

    clientData 作为void pointer 传递。后来,它被转换为SuperpoweredAdvancedAudioPlayer 类型的pointer to pointer。我想clientData 在将其传递给函数之前就是该类型,这就是需要强制转换的原因。我不知道为什么使用这个void* 而不是SuperpoweredAdvancedAudioPlayer**。不好,但并不罕见。

    名为playerA 的变量是指向SuperpoweredAdvancedAudioPlayer 类型对象的指针。取消对指向指针的指针的引用,您将获得一个指向SuperpoweredAdvancedAudioPlayer 对象的指针,与playerA 的类型相同。

    请注意,playerA 仅在 if 块内声明,它的生命在那里结束。块外还有另一个playerA,必须在将其分配给任何东西之前声明。

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2013-08-24
      • 2014-11-14
      相关资源
      最近更新 更多