[英]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.