Я использую Luabind, чтобы выставить свой игровой движок Lua. Недавно я столкнулся с трудностями, когда узнал, что у меня нет возможности создать «новый», например. GUIObject * obj = new GUIObject() в Lua, а все, что создано в Lua, принадлежит Lua.Метод шаблона C++ для создания объектов
Ну, это не была огромная проблема. Я решил просто создать своего рода шаблон Factory на объектах, например. мой GUIManager Имеет
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.
Вы можете запросить дополнительную информацию, если это необходимо
Благодаря
если вы передаете указатель не нужно будет создавать объект шаблон T * CreateObject (T * classPtr) {возвратить новый T();} позволяет: testLabel = theGUI: CreateObject ((GUILabel *) NULL); и template void CreateObject (T * & classPtr) { classPtr = new T(); } для просто: theGUI: CreateObject (testLabel); –
fantastory
Используя этот метод, как я могу позволить Lua узнать, какой объект я пытаюсь создать? насколько мне известно, я получаю ту же проблему, что и раньше, не зная, какую из 2 связанных функций использовать и поднимать ошибку. – OpticFroggy