因此,情况如下:我正在使用C++,SDL和GLConsole。我有一个课程,SDLGame
,其中有Init()
,Loop()
,Render()
等 - 本质上,它拥有我的游戏类的逻辑。
到目前为止,GLConsole是一个不错的库 - 它允许我定义CVars等,甚至在我的SDL类中。然而,定义命令的时候,我必须指定一个ConsoleFunc
,这是typedef为将指针指向成员函数作为函数指针
typedef bool (*ConsoleFunc)(std::vector<std::string> *args);
够简单。但是,正如我所说的,我的函数都在我的类中,我知道我不能将指针类函数作为指针函数参数传递。我无法定义静态函数或在我的类之外创建函数,因为其中一些ConsoleFunc必须访问类数据成员才能使用。我想保持OOP,因为 - 哦,OOP很好。
那么,我确实有这个问题“解决” - 但它是非常丑陋的。我只是将一个SDLGame
的实例声明为extern变量,并在我的ConsoleFuncs/main类中使用它。
所以,问题是:有没有办法做到这一点,不像我这样做的愚蠢愚蠢? (或者:是否有像GLConsole这样的支持SDL的控制台库,并且可以执行我所描述的操作?)
井当当。不管怎么说,还是要谢谢你。有任何建议可供其他图书馆使用?我在看OGLConsole,但它有完全相同的问题。 – Chaosed0 2011-12-21 17:32:19
@user:对不起,没有图书馆的建议。 :/ – Xeo 2011-12-21 17:39:24
我强烈建议使用'void *'“用户数据”。当然,它不像现代语言'委托'那么漂亮,但它是一条安全的路径,因为它是您的代码将回调和用户数据作为一对注册。因此,只需将传入的'void *'强制转换为适当的类类型就可以100%安全,因为回调是根据该意图设置的。 – TheBuzzSaw 2011-12-24 07:09:38