Luabind: производный класс как параметр
Недавно я изучал Luabind с целью интеграции в наше программное обеспечение. Я столкнулся с парой проблем, и я просматривал документацию по Rasterbar Software от Luabind и не смог ее решить. По сути, я представляю функцию, которая принимает строку и абстрактный базовый класс в качестве параметров. Во-первых, я не уверен, правильно ли я поступаю, или, может быть, в Луа требуется какое-то специальное лечение, чтобы это сработало. Во всяком случае, вот код
class UIFactory
{
void addComponentFactory(std::string name, BaseFactory* factory);
}
BaseFactory - это абстрактный базовый класс, который возвращает UIComponent (кнопку, текст и т. Д.), И мы создали производную фабрику с именем TemplateFactory, которая в принципе может быть реализована следующим образом.
TemplateFactory<Button> buttonFactory = new TemplateFactory<Button>();
Затем мы передадим их в UIFactory на C++, как это...
uiFactory.addComponentFactory("Buttons", buttonFactory);
в луабинде...
module(state)
[
class_<UIFactory>("UIFactory")
.def(constructor<>())
.def("AddFactory", &UIFactory::addComponentFactory)
];
и в Луа...
uiFactory = UIFactory()
buttonFactory = ButtonFactory()
uiFactory:AddFactory("Button", buttonFactory)
Эта последняя строка не выполняется, я проверил, что фабрика кнопок и фабрика пользовательского интерфейса создавались и были. Есть ли муравей, которого я пропускаю?
Помощь очень ценится.
1 ответ
Оказывается, мне нужно было выставить базовый класс для lua, а также указать, что buttonFactory была получена
luabind::module(state)
[
luabind::class_<BaseFactory>("BaseFactory")
];
luabind::module(state)
[
luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory")
.def(constructor<>())
]