[英]Extending a C++ application with embedded scripting
我正在開發一個需要多平台兼容的C ++應用程序(Windows / Linux),並希望授予用戶擴展軟件以完全滿足其需求的能力,而不允許他們更改應用程序的關鍵部分(所以我不想要他們在C ++代碼中)。
我正在尋找的是嵌入一種腳本語言(我更喜歡Python因為我已經熟悉它,但它不是強制性的),所以如果我想要這些對象,那么放在一些插件文件夾中的腳本可以操作應用程序的對象modifyable。
最簡單的例子:如果有人想為我的應用程序構建自己的UI,他們應該可以使用這樣的腳本來完成。
但問題是,我從來沒有把C ++和任何類型的外部腳本放在一起,所以我真的不知道如何開始。 在尋找材料開始之后,我發現Lua聲稱這是一個很好的語言,但我找不到好的初學者教程。
如果有人知道一個好的起點,無論是在線資源還是一本好書,我真的很感激。 我不介意在一本好書上花幾塊錢。
作為一個學習者,我傾向於通過混合的示例代碼和解釋這些代碼的幾行來學習。
如果你想使用Python,我肯定建議使用Boost.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)
;
}
它幾乎可以自動處理所有內容:類型之間的轉換,異常,它甚至允許您使用boost::shared_ptr
在兩種語言之間使用引用計數對象。
linux日志中的文章是開始如何在c / c ++代碼中嵌入python解釋器的好地方。 這只是成功的一半,但是當嵌入式解釋器時,您需要將部分軟件發布到腳本環境中。 這樣做的基本API是在C中,如果你的大部分代碼都是C ++,那么最好使用boost :: python,因為在你的C ++類中編寫C包裝可能很麻煩。 您還可以使用Py ++生成boost :: python綁定。
如果您只想使用腳本作為自定義的大門,並且您可以使用python的內存占用,那么它可能是比Lua更好的選擇。 Lua通常適合游戲開發等小環境。 除了lua開發人員之外,還有更多的python開發人員以及更多的內置函數和第三方庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.