2010-05-25 130 views
4

我正在研究如何用脚本功能最佳地扩展C++应用程序,并且我正在查看Python或JavaScript。用户定义的脚本需要能够访问应用程序的数据模型。在C++中嵌入脚本引擎

有没有人有过嵌入这些脚本引擎的经验?有什么潜在的缺陷?

+2

你应该真的考虑Lua,它与C++很好地集成在一起。 – 2010-05-25 18:15:28

+0

嗨托尼小马, 另一种编程语言诞生了。被称为ZetScript我不知道你是否正在寻找脚本引擎,但看一看,以防万一它符合你的需求! http://zetscript.org – 2017-11-28 13:51:12

回答

6

肯定很容易通过使用Boost::Python库(ok,ok,sarcasm)来嵌入Python。当谈到跨语言功能时,没有什么是“轻松”的。 Boost已经做了很多工作来帮助这种发展。我曾经与其中一位开发人员就Boost-> Python界面发誓。他的代码可以由Python中的用户进行编程,并在用户界面中内置REPL。惊人。

但是,使用SWIG和其他语言(如Java)可以更好地观察到我的经验。我目前正在与SWIG合作用Python封装C++。有各种各样的例外,线程,跨语言多态等等。

我会先看看这两个地方。正如我所说,没有东西会“容易”,但这两者都让生活更加宜居。

1

Boost :: Python,就像在wheaties中的答案一样,是一个非常成熟的解决方案。

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

作为R的用户,我更喜欢嵌入R,这可以使用RInside包。一个简单的例子是

#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本质上为您提供了一个使用一些Rcpp接口包的R引擎的很好的包装。

7

Lua也是嵌入程序的绝佳选择。它非常独立,甚至是本地的跨语言电话系统也不错。

对于JavaScript,您现在最好的选择就是看V8(来自Google),这很容易处理。

+2

你可以用Luabind轻松地在C++中使用Lua。效果很好。 – Nikko 2010-05-25 18:13:17

4

除非你真的设置为Python或Javascript,否则我会考虑使用Lua。由于它完全是作为嵌入式脚本引擎设计的,因此它消除了C和C++已经做得很好的重叠。只要你只在你的代码和Lua引擎之间就C可调用函数进行接口,嵌入也很容易。

如果您想要使用C++级别的接口,您可能需要看看LuaBind,它允许从您编写的C++类派生的Lua类(它生成的代理)。

1

看看angelscript 简单易用,嵌入c/C++之类的语法。免费和corss平台。你可以在几个小时后开始。