Używam Luabind, aby odsłonić mój silnik gry Lua. Niedawno wpadłem w kłopoty, gdy dowiedziałem się, że nie ma sposobu, aby utworzyć "nowy", np. GUIObject * obj = new GUIObject() w Lua, zamiast wszystkiego wszystko, co powstało wewnątrz Lua, jest własnością Lua.Metoda szablonów C++ do tworzenia obiektów
Cóż, to nie była wielka sprawa. Postanowiłem po prostu stworzyć rodzaj wzoru Factory na obiektach np. moja GUIManager Has
class GUIManager {
template <class T> T * CreateObject(T classType)
{
return new T();
}
}
My Luabind Wiązania wyglądać następująco:
class_<GUIManager>("GUIManager")
.def("CreateObject", (GUILabel*(GUIManager::*)(GUILabel classType))&GUIManager::CreateObject<GUILabel>)
.def("CreateObject", (GUIImage*(GUIManager::*)(GUIImage classType))&GUIManager::CreateObject<GUIImage>)
Wszystko działa znaleźć w Lua przez wywołanie:
testLabel = theGUI:CreateObject(GUILabel())
Jednak czuję, że to nie jest "poprawny", jak Zasadniczo tworzę obiekt do przekazania, jestem pewien, że jest łatwiejszy sposób, ale wszystkie inne metody, które próbowałem do tej pory nie zgadzają się z kompilatorem lub Luabind.
Poczuj razie potrzeby
Dzięki
jeśli będzie przekazać wskaźnik nie będzie trzeba utworzyć obiektu szablon T * CreateObject (T * classPtr) {return new T();} pozwala na: testLabel = theGUI: CreateObject ((GUILabel *) NULL); i szablon void CreateObject (T * i classPtr) { classPtr = new T(); } dla just: theGUI: CreateObject (testLabel); –
fantastory
Używając tej metody, pozwoliłbym Lui zorientować się, który obiekt próbuję utworzyć? O ile mi wiadomo, skończyłbym z tym samym problemem, który miałem wcześniej, nie wiedząc, która z 2 funkcji związanych do użycia i podnosząc błąd. – OpticFroggy