Luabind:派生类作为参数

时间:2012-04-09 16:09:36

标签: c++ lua factory luabind

我最近一直在学习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工厂正在创建它们。我不知道有什么东西?

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

原来我需要将基类公开给lua并且还指出buttonFactory是派生的

luabind::module(state)
[
    luabind::class_<BaseFactory>("BaseFactory")
];

luabind::module(state)
[ 
    luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory")
    .def(constructor<>())
]