我正在研究如何最好地通过脚本扩展 C++ 应用程序,我正在考虑使用 Python 或 JavaScript。用户定义的脚本将需要访问应用程序的数据模型。
你们有没有嵌入这些脚本引擎的经验?有哪些潜在的陷阱?
我正在研究如何最好地通过脚本扩展 C++ 应用程序,我正在考虑使用 Python 或 JavaScript。用户定义的脚本将需要访问应用程序的数据模型。
你们有没有嵌入这些脚本引擎的经验?有哪些潜在的陷阱?
使用Boost::Python库嵌入Python确实很容易(好的,好的,讽刺)。跨语言功能方面没有什么是“容易”的。Boost在这方面做了很多工作来帮助开发。我与之合作过的开发人员中有一个人非常推崇Boost->Python接口。他的代码可以由用户在Python中编程,并且在UI中内置了REPL。太神奇了。
然而,我的经验是使用SWIG和其他语言,比如Java,观察得更好。我目前正在使用SWIG将C++封装为Python。这涉及到异常、线程、跨语言多态等各种问题。
我首先会看这两个地方。正如我所说,没有什么是“容易”的,但这两个都使生活更可行。
看看Angelscript,它简单易用,嵌入方便,类似于C/C ++的语法。免费且跨平台。您可以在几个小时内开始使用。
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);
}