c++ - Luabind:派生类作为参数

标签 c++ lua factory luabind

我最近一直在学习 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/

相关文章:

c++ - 在 Qt 5.3 中播放 WAV 文件

c - 获取要调用的正确 Lua 元方法 (C-api)

c#如何返回在工厂方法中指定泛型类的类

java - 约书亚布洛赫 #Item 1 : Consider static factory methods instead of constructors

c++ - QGraphicsView 和 QGraphicsScene 坐标系

c++ - 如何在可变参数模板中声明 "implicit conversion"?

Lua 表作为数据库的前端

c++ - 从 docker 容器中读取 docker volume 中的文件

构造函数中的php对象缓存

c++ - 如何获取Lemon Graph Library中索引为n的节点?