8

たとえば、Luaテーブル/オブジェクトがあります。

bannana

そして、この Lua テーブルにはchew、パラメーターを受け取る という名前の関数が含まれています。

bannana.chew(5)

私はSWIGも使用しており、たとえばクラスがありCPersonます:

class CPerson {
    public:
        // ....
        void Eat();
        // ....
};

Lua からこのオブジェクトのインスタンスを取得できます。

person = engine:getPerson()

私ができるようにする必要があるのは、次の Lua コードです。

person = engine:getPerson()
person:Eat(bannana)

パラメータを渡して、テーブル内の関数person:eatを呼び出す場所。chewbannana

は C++ で実装されているため、クラスにすでに Lua 状態ポインターがあると仮定して、CPerson実装するにはどのような変更が必要ですか?Eat()CPerson

Edit1: C++ クラスを Lua にバインドする方法を知りたくありません。これを行うための SWIG が既にあります。Lua テーブル内で C++ から Lua 関数を呼び出す方法を知りたいです。

Edit2:CPersonクラスとbannanaテーブルはどちらも一般的な例です。クラスにはすでに LuaState ポインター/参照があり、メソッドの関数シグネチャは回答者が変更できると想定できCPersonますEat

4

2 に答える 2

9

エラーチェックを無視しています...

lua_getglobal(L, "banana"); // or get 'banana' from person:Eat()
lua_getfield(L, -1, "chew");
lua_pushinteger(L, 5);
lua_pcall(L, 1, 0, 0);
于 2009-12-11T17:00:31.150 に答える
-1

たぶん、「Simpler Cpp Binding」が役立つでしょう。

于 2009-12-11T15:15:27.600 に答える