【问题标题】:Pointer to member-function for SDL audio callback?指向 SDL 音频回调的成员函数的指针?
【发布时间】:2013-05-30 14:31:28
【问题描述】:

我正在使用 SDL 1.2.15 播放来自 libav (ffmpeg) 的音频,如本例中的 here

我已经声明了一个播放声音的类。但现在我必须在SDL_AudioSpec::callback 中存储回调函数的指针(在示例中为wanted_spec.callback)。但我的回调是我班的成员。

SDL 中的回调指针为:

void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);

其中SDLCALL__cdecl

如何在我的wanted_spec_.callback 中存储成员函数的指针?

【问题讨论】:

    标签: c++ pointers callback sdl member


    【解决方案1】:

    如果您想使用非静态成员函数来处理回调,您需要提供转发函数并将userdata 设置为指向目标对象的指针。

    struct CallbackObject
    {
        void onCallback(Uint8 *stream, int len)
        {
            // ....
        }
    
        static void forwardCallback(void *userdata, Uint8 *stream, int len)
        {
            static_cast<CallbackObject*>(userdata)->onCallback(stream, len);
        }
    };
    
    
    
    SDL_AudioSpec audio;
    CallbackObject callbackObject;
    
    audio.callback = CallbackObject::forwardCallback;
    audio.userdata = &callbackObject;
    

    【讨论】:

    • 非常聪明!很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多