簡體   English   中英

將Lua嵌入C ++:以C ++的形式訪問通過Lua創建的C ++(或將結果從Lua返回到C ++)

[英]Embedding Lua in C++: Accessing C++ created through Lua, back in C++ (or returning results back from Lua to C++)

標題聽起來似乎有些遞歸-但這就是我想要做的:

我有C ++類Foo和Foobar; 我正在使用tolua ++將它們導出到Lua

在Lua:

function wanna_be_starting_something()
  foo = Foo:new()
  fb = Foobar:new()

  -- do something
  foo.setResult(42)  -- <- I want to store something back at the C++ end
end

在C ++中

int main(int argc, char argv[])
{
    MyResult res;

    LuaEngine * engine = new LuaEngine();
    engine->run('wbs-something.lua');

    // I now want to be able to access the stored result, in variable res
};

所以我的問題是這樣的:如何將Lua操縱的C ++對象中的數據傳遞回C ++程序中?

要了解如何來回交換數據,您應該了解Lua堆棧,它是Lua與主機程序進行通信所使用的結構。 我想tolua ++會處理您導出的類/方法。

這是一個很好的開始: http : //www.lua.org/pil/24.html適用於Lua 5.0,但是有跡象表明如何使其與5.1一起使用(我假設這是您使用的Lua版本) )。

如果您不想深入研究所有細節,則始終可以使用創建將值設置為全局對象的臨時C ++方法。 恕我直言,這不是最干凈的方法,但是可以工作。

我不知道tolua ++,但是luabind和luabridge都支持您所需要的:
*選項1只是讓lua代碼return whatever ,您將在C ++中得到它。 這要求您具有run()的基於模板的版本,該版本返回一個值。
*選項2是使用lua引擎定義函數,然后將引擎的call方法與函數名稱和參數一起使用。 LuaEngine有幾種支持這種調用的實現:
LuaEngine * engine = new LuaEngine();
engine->run("function a(v) return v . 'a'; end ");
valua = engine->call("a", argument);

暫無
暫無

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

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