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<>())
]
Другие вопросы по тегам