1

我最近一直在学习 Luabind,打算集成到我们的软件中。我遇到了几个问题,我一直在查看 Luabind 的 Rasterbar Software 文档,但无法解决。基本上,我公开了一个将字符串和抽象基类作为参数的函数。首先,我不确定我是否以正确的方式进行此操作,或者在 lua 中可能需要一些特殊处理才能使其正常工作。无论如何,这是代码

class UIFactory
{
    void addComponentFactory(std::string name, BaseFactory* factory);
}

BaseFactory 是一个抽象基类,它返回一个 UIComponent(按钮、文本等),我们派生了一个名为 TemplateFactory 的工厂,它基本上可以像这样实例化。

TemplateFactory<Button> buttonFactory = new TemplateFactory<Button>();

然后我们会像这样将这些传递给 c++ 中的 UIFactory ...

uiFactory.addComponentFactory("Buttons", buttonFactory);

在卢宾德...

module(state)
[
    class_<UIFactory>("UIFactory")
    .def(constructor<>())
    .def("AddFactory", &UIFactory::addComponentFactory)
];

并在 lua...

uiFactory = UIFactory()

buttonFactory = ButtonFactory()

uiFactory:AddFactory("Button", buttonFactory)

最后一行没有执行,我检查了按钮工厂和 ui 工厂是否正在创建并且它们是。有什么我想念的吗?

非常感谢您的帮助。

4

1 回答 1

1

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

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

luabind::module(state)
[ 
    luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory")
    .def(constructor<>())
]
于 2012-04-10T08:20:37.993 回答