在C++; 我正在研究如何最好地扩展脚本应用程序的C++应用程序,我在研究Python或JavaScript。用户定义的脚本需要能够访问应用程序的数据模型

在C++; 我正在研究如何最好地扩展脚本应用程序的C++应用程序,我在研究Python或JavaScript。用户定义的脚本需要能够访问应用程序的数据模型,javascript,c++,python,scripting,embedding,Javascript,C++,Python,Scripting,Embedding,你们中有人有嵌入这些脚本引擎的经验吗?有哪些潜在的陷阱?使用该库嵌入Python肯定很容易(好吧,好吧,讽刺)。说到跨语言功能,没有什么是“容易”的。Boost在帮助此类发展方面做了大量工作。与我共事的一位开发人员在Boost->Python界面上使用了swears。他的代码可以由用户用Python编程,并在UI中内置REPL。太棒了 然而,我的经验在使用SWIG和其他语言(如Java)时得到了更好的观察。我目前正在使用SWIG用Python来包装C++。除了异常、线程、跨语言多态性等等,还有各

你们中有人有嵌入这些脚本引擎的经验吗?有哪些潜在的陷阱?

使用该库嵌入Python肯定很容易(好吧,好吧,讽刺)。说到跨语言功能,没有什么是“容易”的。Boost在帮助此类发展方面做了大量工作。与我共事的一位开发人员在Boost->Python界面上使用了swears。他的代码可以由用户用Python编程,并在UI中内置REPL。太棒了

然而,我的经验在使用SWIG和其他语言(如Java)时得到了更好的观察。我目前正在使用SWIG用Python来包装C++。除了异常、线程、跨语言多态性等等,还有各种各样的陷阱


我会先看看这两个地方。正如我所说,没有什么是“容易”的,但这两种方法都使生活更宜居。

Boost::Python,正如wheaties的回答一样,是一种非常成熟的解决方案

Lua以易于嵌入而闻名,但我自己也没有尝试过

作为的用户,我更感兴趣的是嵌入,这可能是使用包。一个简单的例子是

#include <RInside.h>                // for the embedded R via RInside

int main(int argc, char *argv[]) {

    RInside R(argc, argv);          // create an embedded R instance 

    R["txt"] = "Hello, world!\n";   // assign a char* (string) to 'txt'

    R.parseEvalQ("cat(txt)");       // eval the init string, ignoring any returns

    exit(0);
}
#包含//用于通过RInside的嵌入式R
int main(int argc,char*argv[]){
rinsider(argc,argv);//创建一个嵌入式R实例
R[“txt”]=“你好,世界!\n”;//为“txt”分配一个字符*(字符串)
R.parseEvalQ(“cat(txt)”;//计算init字符串,忽略任何返回
出口(0);
}

包中还有几个例子。基本上,使用一些接口包为R引擎提供了一个很好的包装器。

Lua也是嵌入程序的一个很好的候选对象。它非常独立,甚至本地跨语言呼叫系统也不错


对于JavaScript,您现在最好的选择是查看V8(来自Google),这非常容易使用。

除非您真正使用Python或JavaScript,否则我会考虑使用。由于它完全设计为嵌入式脚本引擎,所以它与C和C++已经很好地重叠了。只要只在代码和Lua引擎之间使用C可调用函数进行接口,就很容易嵌入

如果你想使用C++级接口,你可能需要查看一下,它允许从你所写的C++类派生的一个Lua类的东西。


简单易嵌入,类似c/c++的语法。自由和交叉平台。你可以在几小时内开始。

你可以在C++中用Luabind轻松地使用Lua。很好地考虑。Lua也应该把它与C++完美地结合在一起。嗨,托尼,小马,另一种编程语言诞生了。被称为ZetScript我不知道你是否正在寻找脚本引擎,但看看它是否适合你的需要!