我最近一直在学习 Luabind,目的是将其集成到我们的软件中。我遇到了几个问题,我一直在查看 Luabind 的 Rasterbar 软件文档,但未能解决。基本上,我公开了一个以字符串和抽象基类作为参数的函数。首先,我不确定我是否以正确的方式解决这个问题,或者在 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);
在 luabind 中...
module(state)
[
class_<UIFactory>("UIFactory")
.def(constructor<>())
.def("AddFactory", &UIFactory::addComponentFactory)
];
在 lua 中...
uiFactory = UIFactory()
buttonFactory = ButtonFactory()
uiFactory:AddFactory("Button", buttonFactory)
最后一行没有执行,我已经检查了按钮工厂和 ui 工厂是否正在创建,它们确实是。有没有我遗漏的东西?
非常感谢您的帮助。
最佳答案
原来我需要将基类暴露给 lua 并且还要指出 buttonFactory 是派生的
luabind::module(state)
[
luabind::class_<BaseFactory>("BaseFactory")
];
luabind::module(state)
[
luabind::class<TemplateFactory<Button>, BaseFactory>("ButtonFactory")
.def(constructor<>())
]
关于c++ - Luabind:派生类作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076074/