[LuaとC++の連携] Sol2を使って LuaとC++を連携させるテスト

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

[LuaとC++の連携] Sol2を使って LuaとC++を連携させるテスト

投稿記事 by naohiro19 » 7年前

https://github.com/ThePhD/sol2 読み方は「ソル」で、ポルトガル語で「太陽」という意味を表します。

このライブラリを使うと C++ と Luaをうまく連携できます。 C++11/C++14に対応しているのでVisual Studio 2015/2017、Clang、GCCで動作します。

CODE:

function lua_add(a, b)
   return (a+b)
end
この lua_add関数を C++から呼び出すには 以下のように書きます。

CODE:

#define SOL_CHECK_ARGUMENTS 1
#include 
#include "sol.hpp"
#include 

using namespace std;

int main(int, char*[]) {
    
    // Luaの初期化
    sol::state lua;
    lua.open_libraries(sol::lib::base, sol::lib::package);
    
    // Luaスクリプトファイルの読み込み
    lua.script_file("sample.lua");

    // Luaの関数を呼び出す
    double ret = lua["lua_add"](12, 16);

    // 結果の表示
    cout 
#include "sol.hpp"
#include 

using namespace std;

int c_add(int x, int y) {
    return x + y;
}

int main(int, char*[]) {
    
    // Luaの初期化
    sol::state lua;
    lua.open_libraries(sol::lib::base, sol::lib::package);

    lua["add"] = &c_add;
    lua["add2"] = [](int x, int y) { return x + y; };
    
    // Luaスクリプトファイルの読み込み
    lua.script_file("sample.lua");
 
    return 0;
}
この場合 c_addをaddとしてLua側に登録し、ラムダ式の関数オブジェクトとしてLuaに登録しています。
Luaからこの二つの関数を呼び出すには以下のように書けばOKです。

CODE:

print(add(10, 20))
print(add2(10, 20))
Luaの変数の値を取得するにも簡単です
例えば以下のような Luaにmessage という変数に「Hello, world!」という文字列がある場合もメンバー関数のgetを使います。

CODE:

message = "Hello, world!"
この値をC++で取得するソースコードは以下のようになります。

CODE:

#define SOL_CHECK_ARGUMENTS 1
#include 
#include "sol.hpp"
#include 

using namespace std;

int c_add(int x, int y) {
    return x + y;
}


int main(int, char*[]) {
    
    // Luaの初期化
    sol::state lua;
    lua.open_libraries(sol::lib::base, sol::lib::package);
    
    // Luaスクリプトファイルの読み込み
    lua.script_file("sample.lua");

    auto message = lua["message"].get();
    
    cout ();
double height = ret["height"].get();

std::cout (); でテーブルに入っている値を取り出す[/*][/list]
最後に編集したユーザー naohiro19 on 2017年12月21日(木) 21:33 [ 編集 3 回目 ]

コメントはまだありません。