情况是这样的:我结合使用 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(使用前将#替换为@)