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