指向 SDL 音频回调的成员函数的指针?

Posted

技术标签:

【中文标题】指向 SDL 音频回调的成员函数的指针?【英文标题】:Pointer to member-function for SDL audio callback? 【发布时间】: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 中存储成员函数的指针?

【问题讨论】:

【参考方案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;

【讨论】:

非常聪明!很好的解决方案。

以上是关于指向 SDL 音频回调的成员函数的指针?的主要内容,如果未能解决你的问题,请参考以下文章

类成员函数可以为回调函数吗

C ++创建指向标头内所有公共静态成员函数的指针数组,然后使用它

类内定义线程的回调函数问题

将成员函数指针转换为 FreePascal 中的函数指针

C++ 成员函数作为外部库的回调函数

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合