使 SDL 调用纯虚成员函数作为事件回调?
Making SDL call a pure virtual member function as a event callback?
我目前正在开发一个小应用程序class。它应该使使用 SDL2 的某些步骤变得不那么痛苦。例如,我希望在实现派生的 class(应用程序 class 是一个基本接口)时重载一个名为 handleEvent 的函数,以自动传递当前的 SDL_Event,以便用户可以执行随它去吧。
我认为使用内置的 SDL 函数 SDL_AddEventWatch 创建回调比启动线程并让它手动检查新事件并调用成员函数要好。
但是,SDL Documentation for the function 没有指定使用成员函数作为 "filter"。而且我什至在使用纯虚拟成员函数!
请注意,此函数唯一需要的参数(从我的角度来看)是指向要处理的偶数的指针。然而,仍然需要访问 this 指针,以便用户可以直接更改 class 中的内容。
实现这个的正确方法是什么?
我会使用 libffi 的闭包来围绕与预期签名匹配的实例创建包装器。用于初始化闭包的函数将采用保存的实例参数和任何 SDL 传递并将它们转发到虚拟函数。
我目前正在开发一个小应用程序class。它应该使使用 SDL2 的某些步骤变得不那么痛苦。例如,我希望在实现派生的 class(应用程序 class 是一个基本接口)时重载一个名为 handleEvent 的函数,以自动传递当前的 SDL_Event,以便用户可以执行随它去吧。
我认为使用内置的 SDL 函数 SDL_AddEventWatch 创建回调比启动线程并让它手动检查新事件并调用成员函数要好。
但是,SDL Documentation for the function 没有指定使用成员函数作为 "filter"。而且我什至在使用纯虚拟成员函数!
请注意,此函数唯一需要的参数(从我的角度来看)是指向要处理的偶数的指针。然而,仍然需要访问 this 指针,以便用户可以直接更改 class 中的内容。
实现这个的正确方法是什么?
我会使用 libffi 的闭包来围绕与预期签名匹配的实例创建包装器。用于初始化闭包的函数将采用保存的实例参数和任何 SDL 传递并将它们转发到虚拟函数。