Uso Luabind per esporre il mio motore di gioco a Lua. Recentemente ho avuto problemi quando ho scoperto che non c'è modo per me di creare un "nuovo", ad es. GUIObject * obj = new GUIObject() in Lua, invece tutto ciò che è stato creato all'interno di Lua è di proprietà di Lua.Metodo template C++ per creare oggetti
Beh, non è stato un grosso problema, ho deciso di creare una sorta di modello di fabbrica sugli oggetti per es. il mio GUIManager ha
class GUIManager {
template <class T> T * CreateObject(T classType)
{
return new T();
}
}
miei Luabind Associazioni simile a questa:
class_<GUIManager>("GUIManager")
.def("CreateObject", (GUILabel*(GUIManager::*)(GUILabel classType))&GUIManager::CreateObject<GUILabel>)
.def("CreateObject", (GUIImage*(GUIManager::*)(GUIImage classType))&GUIManager::CreateObject<GUIImage>)
Tutto funziona trovano in Lua chiamando:
testLabel = theGUI:CreateObject(GUILabel())
Tuttavia sento che questo non è "corretta", come Essenzialmente sto creando un oggetto da passare, sono sicuro che c'è un modo più semplice ma tutti gli altri metodi che ho provato fino ad ora non concordano con il compilatore o con Luabind.
Sentitevi liberi di domanda per ulteriori informazioni, se necessario
Grazie
se si passa un puntatore che non avrebbe bisogno di creare l'oggetto modello T * CreateObject (T * classPtr) {return new T();} permette di: testLabel = theGUI: CreateObject ((GUILabel *) NULL); e modello void CreateObject (T * & classPtr) { classPtr = new T(); } per just: theGUI: CreateObject (testLabel); –
fantastory
Usando questo metodo, come faccio a far sapere a Lua quale oggetto sto cercando di creare? per quanto ne so, mi ritroverei con lo stesso problema che avevo in precedenza, non sapendo quale delle 2 funzioni associate usare e generare un errore. – OpticFroggy