Ich verwende Luabind, um meine Spiel-Engine für Lua freizulegen. Kürzlich geriet ich in Schwierigkeiten, als ich herausfand, dass es für mich keine Möglichkeit gibt, ein "neues" z. GUIObject * obj = new GUIObject() in Lua, stattdessen ist alles, was in Lua erstellt wurde, im Besitz von Lua.C++ Template-Methode zum Erstellen von Objekten
Nun, das war kein großes Problem Ich entschied mich, nur eine Art Factory-Muster auf Objekte für z. mein GUIManager Hat
class GUIManager {
template <class T> T * CreateObject(T classType)
{
return new T();
}
}
Meine Luabind Bindungen wie folgt aussehen:
class_<GUIManager>("GUIManager")
.def("CreateObject", (GUILabel*(GUIManager::*)(GUILabel classType))&GUIManager::CreateObject<GUILabel>)
.def("CreateObject", (GUIImage*(GUIManager::*)(GUIImage classType))&GUIManager::CreateObject<GUIImage>)
Alles funktioniert in Lua finden durch den Aufruf:
testLabel = theGUI:CreateObject(GUILabel())
aber ich fühle mich nicht "richtig" ist, wie Ich erstelle im Wesentlichen ein Objekt, das übergeben werden kann, ich bin mir sicher, dass es einen einfacheren Weg gibt, aber alle anderen Methoden, die ich bisher ausprobiert habe, stimmen weder mit dem Compiler noch mit Luabind überein. wenn nötig
Dank
, wenn Sie einen Zeiger passieren würden Sie nicht Objekt Vorlage T * Create (T * classPtr) {return new T();} erstellen müssen ermöglicht: testLabel = theGUI: Create ((GUILabel *) NULL); und Vorlage void CreateObject (T * & KlassePtr) { classPtr = new T(); } für nur: theGUI: CreateObject (testLabel); –
fantastory
Wie würde ich Lua mitteilen, welches Objekt ich erstellen möchte? Soweit mir bekannt ist, würde ich mit dem gleichen Problem enden, das ich zuvor hatte, ohne zu wissen, welche der beiden gebundenen Funktionen zu verwenden und einen Fehler zu erzeugen. – OpticFroggy