如何从 Lua 更新 C++ 对象

如何在 Lua 中定义一个函数,该函数将更新从 C++ 传递给它的对象(可能是通过指针或引用传递的)?我使用 sol2,并希望在以下 C++ 源代码中更新 Foo 对象 fm_ 数据成员:

#define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>
#include <iostream>

struct Foo
{
  int m_ = 0;
  void bar() { std::cout << "hello\n;"; }
};

int main(int, char*[])
{
  sol::state lua;
  lua.open_libraries(sol::lib::base);

  sol::load_result script1 = lua.load_file("test1.lua");
  sol::function fx = lua["f"];

  Foo f;
  fx(f);
  assert(4 == f.x);

  return 0;
}

... 我的 Lua 脚本当前看起来像这样:

function f(x)
  x:m_ = 4
end
点赞