扩展C++;嵌入脚本的应用程序 我开发了一个C++应用程序,需要多平台兼容(Windows /Linux),并且希望用户能够在不改变应用程序关键部分的情况下扩展软件以满足他们的需求(所以我不希望它们在C++代码中)。

扩展C++;嵌入脚本的应用程序 我开发了一个C++应用程序,需要多平台兼容(Windows /Linux),并且希望用户能够在不改变应用程序关键部分的情况下扩展软件以满足他们的需求(所以我不希望它们在C++代码中)。,c++,python,scripting,lua,C++,Python,Scripting,Lua,我想要的是嵌入一种脚本语言(我更喜欢Python,因为我已经熟悉它了,但它不是强制性的),所以如果我想修改这些对象,放在某个插件文件夹中的脚本可以操纵应用程序的对象 最简单的例子是:如果有人想为我的应用程序构建自己的UI,他们应该能够使用这样的脚本来实现 问题是,我从来没有把C++和任何一种外部脚本放在一起,所以我真的不知道如何开始。在寻找入门资料后,我发现这是一门很好的语言,但我找不到好的初学者教程 如果有人知道一个好的起点,无论是在线资源还是好书,我都会非常感激。我不介意花几美元买一本好书。

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

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

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

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


作为一名学习者,我倾向于通过混合使用示例代码和几行解释代码来获得最好的学习效果。

对于Python,我想boost库就是要做到这一点的。至于Lua,我自己也没用过,但快速的谷歌搜索首先让我找到了它,然后又找到了它。您研究过这些吗?

我建议您阅读,这本书有一整节介绍如何将Lua嵌入C(和C++)中

这是非常高的评价

该语言还具有相当好的主动性。

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


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

如果您想使用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)
    ;
}
struct-World
{
无效集(std::string msg){this->msg=msg;}
std::string greet(){return msg;}
std::字符串msg;
};
BOOST_PYTHON_模块(您好)
{
类(“世界”)
.def(“问候语”和世界::问候语)
.def(“集”&世界::集)
;
}

它几乎可以自动处理所有事情:类型之间的转换、异常,甚至允许您通过
boost::shared\u ptr
在两种语言之间使用引用计数对象

@Hossein谢谢你提供的信息。修正了。你可能会对这本书感兴趣。从我目前所能看到的来看,这本书的推荐书看起来是最有希望的。我一定会看一看。谢谢。对于Lua,有一个Luabind,它源于BoostPython,工作原理非常相似(而且很好)。非常感谢!我以前没有使用过Lua,并且对如何开始感兴趣。这听起来不错,Boost文档看起来也写得很好。今晚晚些时候我会深入调查。谢谢。如果你在Windows上使用Visual Studio,那么安装库会容易得多,只需使用BoostPro的安装程序即可:不幸的是,我不是在Debian中使用gcc 4.4.5进行此项目,但谢谢你的提示。正如大家所知,Lua有一个类似的库,名为luabind。它的灵感来自boost.python,使用luabind将类绑定到Lua的代码看起来与使用boost.python的python几乎相同