Estoy usando Luabind para exponer el motor de mi juego a Lua. Recientemente me encontré con problemas cuando descubrí que no hay forma de que cree un "nuevo", p. GUIObject * obj = new GUIObject() en Lua, en cambio todo lo creado dentro de Lua es propiedad de Lua.Método de plantilla C++ para crear objetos
Bueno, eso no fue un gran problema Decidí simplemente crear un tipo de patrón de fábrica en objetos para, p. Ej. Tiene mi GUIManager
class GUIManager {
template <class T> T * CreateObject(T classType)
{
return new T();
}
}
Mis Luabind enlaces tener este aspecto:
class_<GUIManager>("GUIManager")
.def("CreateObject", (GUILabel*(GUIManager::*)(GUILabel classType))&GUIManager::CreateObject<GUILabel>)
.def("CreateObject", (GUIImage*(GUIManager::*)(GUIImage classType))&GUIManager::CreateObject<GUIImage>)
Todo funciona encuentran en Lua llamando:
testLabel = theGUI:CreateObject(GUILabel())
Sin embargo siento que este no es "correcta", como Básicamente estoy creando un objeto para pasar, estoy seguro de que hay una manera más fácil, pero todos los demás métodos que he probado hasta el momento no concuerdan ni con el compilador ni con Luabind.
No dude en pedir más información si es necesario
Gracias
si se pasa un puntero que no habría necesidad de crear el objeto plantilla T * CreateObject (T * classPtr) {return new T();} permite: testLabel = theGUI: CreateObject ((GUILabel *) NULL); y plantilla void CreateObject (T * & classPtr) { classPtr = new T(); } para just: theGUI: CreateObject (testLabel); –
fantastory
Utilizando ese método, ¿cómo podría informar a Lua qué objeto estoy intentando crear? por lo que yo sé, terminaría con el mismo problema que tuve antes sin saber cuál de las 2 funciones vinculadas usar y generar un error. – OpticFroggy