C++模板方法来创建对象
C++ template method to create objects
我正在使用Luabind向Lua公开我的游戏引擎。我最近遇到了麻烦,因为我发现我没有办法在Lua中创建一个"新的",例如GUIObject*obj=new GUIObject(),而在Lua内创建的所有东西都归Lua所有。
这不是一个大问题,我决定在对象上创建一种Factory模式,例如我的GUIManager Has
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。
如果需要,请随时询问更多信息
感谢
由于Luabind绑定使用CreateObject
方法的显式实例化,因此可以将每个实例绑定到不同的名称:
class_<GUIManager>("GUIManager")
.def("CreateLabel", /*...*/&GUIManager::CreateObject<GUILabel>)
.def("CreateImage", /*...*/&GUIManager::CreateObject<GUIImage>)
然后,您的Lua代码可以"简化"为:
testLabel = theGUI:CreateLabel()
并且在工厂方法中不应该再需要参数了。
class GUIManager {
template <class T> T * CreateObject() { return new T(); }
};
相关文章:
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- C ++:如何在不创建对象的情况下在主函数中调用方法
- 从类模板创建对象的工厂函数模板?
- 如何调用从 QML 中C++创建的对象的方法?
- 如何在一种方法中创建对象并在另一种方法中使用它
- 使用各种数据类型成员创建对象的简便方法
- C++创建具有可变参数模板方法的接口
- 在模板中使用参数包创建对象
- 创建一个类方法模板,该模板将使用稍后实现的函数
- 是否可以在一个语句中创建对象并调用方法?
- 在堆栈上创建对象的不同方法
- 从另一个模板对象调用模板方法时出现奇怪的编译行为
- C++ 是在每个实例化上创建的模板类中每个方法的新版本
- C 双重调度,出厂模式或一种从接收到的序列数据创建派生对象的方法
- 如何创建新类以部署opencv和对象的方法
- C++模板方法来创建对象
- 存储动态创建对象的列表/向量的最佳方法是什么
- 无法创建对象并使用其模板类方法
- 创建一个比较两个对象的方法
- 在模板中调用对象的方法