【发布时间】:2012-08-14 02:04:50
【问题描述】:
我正在使用 Luabind 将我的游戏引擎暴露给 Lua。 我最近遇到了麻烦,因为我发现我无法创建一个“新”,例如在 Lua 中 GUIObject * obj = new GUIObject(),而在 Lua 中创建的所有东西都归 Lua 所有。
这不是一个大问题,我决定在对象上创建一种工厂模式,例如我的 GUIManager 有
class GUIManager {
template <class T> T * CreateObject( T classType )
{
return new T();
}
}
我的 Luabind 绑定看起来像这样:
class_<GUIManager>("GUIManager")
.def("CreateObject", (GUILabel*(GUIManager::*)(GUILabel classType))&GUIManager::CreateObject<GUILabel>)
.def("CreateObject", (GUIImage*(GUIManager::*)(GUIImage classType))&GUIManager::CreateObject<GUIImage>)
通过调用在 Lua 中找到所有工作:
testLabel = theGUI:CreateObject(GUILabel())
但是我觉得这不是“正确的”,因为我实际上是在创建一个要传入的对象,我确信有一种更简单的方法,但到目前为止我尝试过的所有其他方法都不同意编译器或 Luabind。
如果需要,请随时询问更多信息
谢谢
【问题讨论】:
-
如果你将传递一个指针,你就不需要创建对象模板
T * CreateObject( T *classPtr ) {return new T();} 允许:testLabel = theGUI:CreateObject ((GUILabel *) NULL);和模板 void CreateObject( T *&classPtr ) { classPtr = new T(); } 仅用于:theGUI:CreateObject(testLabel); -
使用该方法如何让 Lua 知道我要创建哪个对象?据我所知,我最终会遇到与之前相同的问题,不知道要使用两个绑定函数中的哪一个并引发错误。