使用嵌入式脚本扩展C ++应用程序

时间:2012-01-15 19:41:48

标签: c++ python scripting lua

我正在开发一个需要与多平台兼容的C ++应用程序(Windows / Linux),并希望授予用户扩展软件以完全满足其需求的能力,而不允许他们更改应用程序的关键部分(所以我不希望它们出现在C ++代码中。)

我正在寻找的是嵌入一种脚本语言(我更喜欢Python,因为我已经熟悉它了,但它不是强制性的),所以如果我想要这些脚本放在一些插件文件夹中可以操作应用程序的对象对象是可修改的。

最简单的例子:如果有人想为我的应用程序构建自己的UI,他们应该可以使用这样的脚本来完成。

问题是,我从来没有把C ++和任何类型的外部脚本放在一起,所以我真的不知道如何开始。在寻找材料开始之后,我发现Lua声称这是一个很好的语言,但我找不到好的初学者教程。

如果有人知道一个好的起点,无论是在线资源还是一本好书,我都会非常感激。我不介意花一些钱买一本好书。

作为一个学习者,我倾向于通过混合的示例代码和解释这些代码的几行来学习。

4 个答案:

答案 0 :(得分:6)

我建议你阅读Programming in Lua,这本书有关于如何在C(和C ++)中嵌入Lua的整个部分。

Amazon users给予了很高的评价。

该语言也非常好online documentation且有效mailing list

答案 1 :(得分:3)

如果你想使用Python,我肯定建议使用Boost.Python。这是一个设计精良的图书馆。举个例子:要将C ++类公开给Python,你需要做的就是:

struct World
{
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    std::string msg;
};

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
        .def("greet", &World::greet)
        .def("set", &World::set)
    ;
}

它几乎可以自动处理所有内容:类型之间的转换,异常,它甚至允许您使用boost::shared_ptr在两种语言之间使用引用计数对象。

答案 2 :(得分:1)

文章here at linux journal是开始如何在c / c ++代码中嵌入python解释器的好地方。这只是成功的一半,但是当嵌入式解释器时,您需要将部分软件发布到脚本环境中。这样做的基本API是在C中,如果你的大部分代码都是C ++,那么最好使用boost :: python,因为在你的C ++类中编写C包装可能很麻烦。您还可以使用Py ++生成boost :: python绑定。

如果您只想使用脚本作为自定义的大门,并且您可以使用python的内存占用,那么它可能是比Lua更好的选择。 Lua通常适合游戏开发等小环境。除了lua开发人员之外,还有更多的python开发人员以及更多的内置函数和第三方库。

答案 3 :(得分:0)

对于Python,我想升级库就是为了做到这一点。至于Lua,我自己还没有使用它,但是快速谷歌搜索首先引导我debian admin然后到Lua's C interface。你看过那些吗?