0
は、私は2つのクラスC++ポインタをルアにエクスポートするにはどうしたらいいですか? 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
は私によく合っていると思います。
(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;
}
これはおそらく、解決策か?
軽いユーザーデータではない重いユーザーデータが必要です。 – lhf
@francis lua_pushuserdataではなくlua_newuserdata()です。 – Vlad
私はlua_newuserdata()を知っていましたが、新しいデータを作成しようとしています。なぜなら、私はこの関数の前にAインスタンスを作成しているからです。私はここでゲッターが必要です。 @Vlad – francis