2010-05-25 127 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平臺。你可以在幾個小時後開始。