[英]Extending a C++ application with embedded scripting
我正在开发一个需要多平台兼容的C ++应用程序(Windows / Linux),并希望授予用户扩展软件以完全满足其需求的能力,而不允许他们更改应用程序的关键部分(所以我不想要他们在C ++代码中)。
我正在寻找的是嵌入一种脚本语言(我更喜欢Python因为我已经熟悉它,但它不是强制性的),所以如果我想要这些对象,那么放在一些插件文件夹中的脚本可以操作应用程序的对象modifyable。
最简单的例子:如果有人想为我的应用程序构建自己的UI,他们应该可以使用这样的脚本来完成。
但问题是,我从来没有把C ++和任何类型的外部脚本放在一起,所以我真的不知道如何开始。 在寻找材料开始之后,我发现Lua声称这是一个很好的语言,但我找不到好的初学者教程。
如果有人知道一个好的起点,无论是在线资源还是一本好书,我真的很感激。 我不介意在一本好书上花几块钱。
作为一个学习者,我倾向于通过混合的示例代码和解释这些代码的几行来学习。
如果你想使用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
在两种语言之间使用引用计数对象。
linux日志中的文章是开始如何在c / c ++代码中嵌入python解释器的好地方。 这只是成功的一半,但是当嵌入式解释器时,您需要将部分软件发布到脚本环境中。 这样做的基本API是在C中,如果你的大部分代码都是C ++,那么最好使用boost :: python,因为在你的C ++类中编写C包装可能很麻烦。 您还可以使用Py ++生成boost :: python绑定。
如果您只想使用脚本作为自定义的大门,并且您可以使用python的内存占用,那么它可能是比Lua更好的选择。 Lua通常适合游戏开发等小环境。 除了lua开发人员之外,还有更多的python开发人员以及更多的内置函数和第三方库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.