c++ - 将指向成员函数的指针作为指向函数的指针传递

标签 c++ callback sdl

情况是这样的:我结合使用了 C++、SDL 和 GLConsole。我有一个类,SDLGGame,它有 Init()Loop()Render() 等- 本质上,它包含我的游戏类的逻辑。
到目前为止,GLConsole 是一个不错的库 - 它允许我定义 CVars 等,甚至在我的 SDL 类中也是如此。但是,在定义命令时,我必须指定一个 ConsoleFunc,它的类型定义为

typedef bool (*ConsoleFunc)( std::vector<std::string> *args);

很简单。但是,就像我说的,我的函数都在我的类中,而且我知道我不能将类函数指针作为函数指针参数传递。我无法定义静态函数或在我的类之外创建函数,因为其中一些 ConsoleFunc 必须访问类数据成员才能发挥作用。我想保留它 OOP,因为 - 好吧,OOP 很好。

好吧,我实际上已经“解决”了这个问题 - 但它非常难看。我只是将 SDLGGame 的实例声明为外部变量,并在我的 ConsoleFuncs/主类中使用它。

所以,问题是:有没有一种方法可以做到这一点,而不是像我这样做的那样愚蠢和愚蠢? (或者:是否有像 GLConsole 这样支持 SDL 并且可以执行我所描述的操作的控制台库?)

最佳答案

如果你拥有的唯一接口(interface)是那个函数指针,那你就完蛋了。

一个成员函数需要一个 this要调用的指针,如果您无法传递它,那您就不走运了(我猜 std::vector<std::string>* args 指针是您从库中传递的指针)。

换句话说,即使该库使用 C++ 容器,它也不是一个好的 C++ 库,因为它依赖于自由函数进行回调。一个好的 C++ 库应该使用 boost::function或类似的东西,或者至少会让你通过 void* user_data传递给回调的指针。如果你有,你可以通过 this类的指针,将其投回回调内部,并调用适当的成员函数。

关于c++ - 将指向成员函数的指针作为指向函数的指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476040/

相关文章:

c++ - C++内存管理错误

arrays - 在 Node.js 中异步添加到数组

sdl - 如何在 Windows 上构建 Go-SDL?

c++ - 如何连接一个字符串和一个整数来生成文件名?

c++ - 为什么排序函数在全局命名空间中?

c++ - 可调用项,转发,右值和线程

c++ - C++代码混淆中的typedef

node.js - 由于异步nodejs,无法将数据添加到数组

javascript - 如何正确插入回调函数,让一个函数结束后再执行另一个函数

c++ - 创建我自己的 SDL 事件结构是否安全?