如何将 C++ 指针导出到 lua?

在 C++ 中,我有两个类

class A
{
void a_func();
}

class B
{
A* _a;
A* GetA(){return _a;}
}

假设现在有一个 B 对象的用户数据对象 b。

a = b:GetA();
a:a_func();

问题是,如何实现 B::GetA ?

可能,你们会让我使用 lightuserdata。但是,据我所知,lightuserdata 没有单独的元表。所以,即使我将指针推入 lightuserdata 中,我仍然不能像上面那样使用 a_func()。而且由于我在这里没有创建 A,所以也不能使用 lua_newuserdata。

在我的情况下,我认为不存在的 lua_pushuserdata 会适合我。


(更新)

int B::GetA_lua(lua_State* L)
{
  void* p = lua_newuserdata(L, sizeof(POINTER));
  memcpy(p, &_a, sizeof(POINTER);
  lua_getmetatable();
  lua_setmetatable();
  return 1;
}

int A::a_func_lua(lua_State* L)
{
  void* p = lua_touserdata();
  (A*)(*p)->*a_func_pointer();
  return 0;
}

这是一个可能的解决方案吗?

点赞
用户6243726
用户6243726
    int B::GetA_lua(lua_State* L)
    {
        void* p = lua_newuserdata(L, sizeof(POINTER));
        memcpy(p, &_a, sizeof(POINTER));
        lua_getmetatable();
        lua_setmetatable();
        return 1;
    }

    int A::a_func_lua(lua_State* L)
    {
        void* p = lua_touserdata();
        (A*)(*p)->*a_func_pointer();
        return 0;
    }
2017-04-27 05:44:49