我最近一直在学习Luabind,目的是整合到我们的软件中。我遇到了一些问题,我一直在看Luabind的Rasterbar软件文档并且无法解决它。基本上,我暴露了一个函数,它接受一个字符串和一个抽象基类作为参数。首先,我不确定我是否以正确的方式进行此操作,或者可能需要一些特殊的处理才能使用。无论如何,这是代码
class UIFactory
{
void addComponentFactory(std::string name, BaseFactory* factory);
}
BaseFactory是一个抽象基类,它返回一个UIComponent(按钮,文本等),我们派生了一个名为TemplateFactory的工厂,基本上可以这样实例化。
TemplateFactory<Button> buttonFactory = new TemplateFactory<Button>();
然后我们将这些传递给c ++中的UIFactory ......
uiFactory.addComponentFactory("Buttons", buttonFactory);
在luabind ......
module(state)
[
class_<UIFactory>("UIFactory")
.def(constructor<>())
.def("AddFactory", &UIFactory::addComponentFactory)
];
并且在lua ......
uiFactory = UIFactory()
buttonFactory = ButtonFactory()
uiFactory:AddFactory("Button", buttonFactory)
最后一行没有执行,我已经检查过按钮工厂和ui工厂正在创建它们。我不知道有什么东西?
非常感谢帮助。
答案 0 :(得分:1)
原来我需要将基类公开给lua并且还指出buttonFactory是派生的
luabind::module(state)
[
luabind::class_<BaseFactory>("BaseFactory")
];
luabind::module(state)
[
luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory")
.def(constructor<>())
]