読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

俺々Luaバインディングライブラリ

Lua5.2且つVisual C++2013で使󠄁へる丁度良いLuaバインディングがどうにも見つからなかつたので、久々にメタプロで遊󠄁ぶのも兼󠄁ねて俺々バインディングを作る事にした。

GitHub - nagoya313/yutolua: 何番煎じか分らないLuaのバインディング
APIがまだ固まつてなくて中々あれだけど、取敢ずヘッダオンリーで頑張る豫定。
以下は今の處の雰󠄁圍󠄁氣。

Lua實行

#include <iostream>
#include <lua.hpp> // Luaのヘッダは自分でインクルード(Lua自體をC++でビルドして例外を有效にしたりできる爲)
#include <yutolua/state.hpp>

int main() {
  try {
    // yutolua::unique_stateはlua_closeを呼ぶカスタムデリータを指定したlua_State *のstd::unique_ptr
    yutolua::unique_state lua{yutolua::make_state()};
    yutolua::open_libs(lua);
    yutolua::do_string(lua, "print('Hello Lua!');");
  } catch (const yutolua::exception &err) {
    std::cerr << diagnostic_information(err) << std::endl;
  }
}

C++からLua函數呼出し

#include <iostream>
#include <lua.hpp>
#include <yutolua/state.hpp>
#include <yutolua/function.hpp>

int main() {
  try {
    yutolua::unique_state lua{yutolua::make_state()};
    yutolua::open_libs(lua);
    yutolua::do_string(lua, "function add(x, y) return x + y; end");
    // 戾り値の型にstd::pairやstd::array, std::tupleを指定すると複數戾り値を持つLua函數を呼べる
    yutolua::function<int (int, int)> lua_func{lua, "add"};
    std::cout << lua_func(1, 2) << std::endl;
  } catch (const yutolua::exception &err) {
    std::cerr << diagnostic_information(err) << std::endl;
  }
}

C++函數をLuaから呼出し

#include <iostream>
#include <lua.hpp>
#include <yutolua/state.hpp>
#include <yutolua/c_function.hpp>

void cpp_function(const std::string &str) {
  std::cout << str << std::endl;
}

int main() {
  try {
    yutolua::unique_state lua{yutolua::make_state()};
    yutolua::open_libs(lua);
    // 函數ポインタに變換できるラムダ式も登錄可能
    yutolua::define(lua, "cpp_function", cpp_function);
    yutolua::do_string(lua, "cpp_function('Hello Lua!');");
  } catch (const yutolua::exception &err) {
    std::cerr << diagnostic_information(err) << std::endl;
  }
}

使󠄁へる型にまだ制限があつたりする(例へばまだ參照が使󠄁へなかつたり)。