0
在C++中,我有两个类如何将C++指针导出到lua?
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没有单独的metatable。所以,即使我将指针作为lightuserdata来推,我仍然不能像上面那样使用a_func()。由于我在这里不创建A,所以lua_newuserdata也不能使用。我认为lua_pushuserdata
不存在将适合我。
(UPDATE)
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;
}
这是一个可能的解决方案?
您需要沉重的userdata而不是light userdata。 – lhf
@francis它是lua_newuserdata(),而不是lua_pushuserdata – Vlad
我知道lua_newuserdata(),但它会创建新的数据,这不是我想要的。因为,我已经在此函数之前创建了A实例。我只需要一个Getter在这里。 @Vlad – francis