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

Extending a C++ application with embedded scripting

本文关键字:C++ 应用程序 扩展 脚本 嵌入式      更新时间:2023-10-16

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

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

最简单的例子是:如果有人想为我的应用程序构建自己的UI,他们应该能够使用这样的脚本来实现。

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

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

作为一名学习者,我倾向于从示例代码和几行解释代码中学习到最好的东西。

我建议你阅读Lua中的编程,这本书有一整节关于如何将Lua嵌入到C(和C++)中。

亚马逊用户对它的评价非常高。

该语言也有相当好的在线文档和一个活跃的邮件列表。

如果你想使用Python,我绝对建议你使用Boost.Python。这是一个设计得非常好的库。举个例子:向Python公开C++类所要做的就是:

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在两种语言之间使用引用计数的对象。

linux期刊上的这篇文章是一个很好的起点,可以了解如何在c/c++代码中嵌入python解释器。然而,这只是战斗的一半,因为当解释器被嵌入时,您需要将软件的某些部分发布到脚本环境中。实现这一点的基本API是用C编写的,如果大多数代码都是C++,那么最好使用boost::python,因为围绕C++类编写C包装器可能很麻烦。您还可以使用Py++生成boost::python绑定。

如果你只想把脚本作为一扇定制之门,并且你可以忍受python的内存占用,那么它可能是比Lua更好的选择。Lua通常适合小环境,比如游戏开发。还有比lua开发人员多得多的python开发人员,以及更多的内置库和第三方库。

对于Python,我想boost库就是用来做这件事的。至于Lua,我自己还没有用过,但在谷歌上快速搜索后,我首先找到了debian admin,然后找到了Lua的C接口。你查过了吗?