使SDL调用纯虚拟成员函数作为事件回调?

时间:2017-12-02 21:16:17

标签: c++ sdl-2

我目前正在开发一个小型应用程序类。它应该使SDL2的某些步骤减少痛苦。首先,我希望在实现派生类(应用程序类是基本接口)时重载一个名为handleEvent的函数,以便自动传递当前的SDL_Event,以便用户可以使用它来完成任务。

我认为使用内置的SDL函数SDL_AddEventWatch来创建回调会比启动一个线程更好,并让它手动检查新事件并调用成员函数。

但是,SDL Documentation for the function没有指定使用成员函数作为“过滤器”。我甚至使用纯虚拟成员函数!

请注意,此功能所需的唯一参数(从我的角度来看)是指向要处理的偶数的指针。但是仍然需要访问this指针,以便用户可以直接更改类中的内容。

实施此方法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我会使用libffi的闭包来创建一个与预期签名匹配的实例的包装器。用于初始化闭包的函数将获取保存的实例参数以及SDL传递的任何内容并将它们转发到虚函数中。