簡體   English   中英

使用嵌入式腳本擴展C ++應用程序

[英]Extending a C++ application with embedded scripting

我正在開發一個需要多平台兼容的C ++應用程序(Windows / Linux),並希望授予用戶擴展軟件以完全滿足其需求的能力,而不允許他們更改應用程序的關鍵部分(所以我不想要他們在C ++代碼中)。

我正在尋找的是嵌入一種腳本語言(我更喜歡Python因為我已經熟悉它,但它不是強制性的),所以如果我想要這些對象,那么放在一些插件文件夾中的腳本可以操作應用程序的對象modifyable。

最簡單的例子:如果有人想為我的應用程序構建自己的UI,他們應該可以使用這樣的腳本來完成。

但問題是,我從來沒有把C ++和任何類型的外部腳本放在一起,所以我真的不知道如何開始。 在尋找材料開始之后,我發現Lua聲稱這是一個很好的語言,但我找不到好的初學者教程。

如果有人知道一個好的起點,無論是在線資源還是一本好書,我真的很感激。 我不介意在一本好書上花幾塊錢。

作為一個學習者,我傾向於通過混合的示例代碼和解釋這些代碼的幾行來學習。

我建議你閱讀Lua編程 ,這本書有關於如何在C(和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開發人員以及更多的內置函數和第三方庫。

對於Python,我想升級庫是為了做到這一點。 至於Lua,我自己並沒有使用它,但是快速谷歌搜索首先讓我進入debian管理員 ,然后是Lua的C界面 你看過那些嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM