C++で、Lua側から呼び出された関数の戻り値にtableを設定する方法
動機
自分のプログラムにLuaを組み込もうと思い、さすがにCインターフェースを使うのは嫌だなぁと思っていい感じのライブラリを探して見つけて使ってみたら良さそうな感じだったので採用したが、tableの返し方が分からずハマってしまったので、忘れないように解法を残しておく
要するに
同じようなことで悩んでたissue見つかって、親切にもやり方が書いてあったので解決
sol::object multiply(sol::this_state thislua) {
sol::state_view existing_state = thislua;
auto table = existing_state.create_table();
table["test"] = "好きなように";
return table;
}
lua["multiply"] = multiply;
要するにこんな感じでtableを作って返す関数を登録して
function ShowTable(t)
for key, val in pairs(t) do
if type(val) == "table" then
print("key: " .. key .. " table ->")
ShowTable(val)
else
print("key: " .. key .. " val: " .. tostring(val))
end
end
end
ShowTable(multiply())
Lua側で登録した関数を呼んであげれば、C++側で作ったtableが返る
コツとしては、登録する関数の引数に "sol::this_state"を受け取るようにすること
そうすることによって、なんやかんやした後に"existing_state.create_table();"を呼び出してtableを作ることが可能になります
Author And Source
この問題について(C++で、Lua側から呼び出された関数の戻り値にtableを設定する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/amate/items/8485be5217f510b53fb6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .