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

2023-12-08

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

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

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

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

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


如果您拥有的唯一接口是该函数指针,那么您就完蛋了。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将指向成员函数的指针作为指向函数的指针传递 的相关文章

随机推荐