0

クラスluaがあります。

lua クラスには、次のように定義されたメソッド registerFunc() があります。

void lua::registerFun() {
    lua_register( luaState, "asd", luaApi::asd);
    lua_register( luaState, "zxc", luaApi::zxc);
}

lua_register は lua ライブラリの組み込み関数です: http://pgl.yoyo.org/luai/i/lua_register

luaApi クラスの静的メソッドを 3 番目の引数として受け取ります。

現在、一部のプログラマーは lua クラスを使用したいと考えているため、次のような静的メソッドの定義を使用して独自のクラスを作成する必要があります。

class luaApi {
public:
    static int asd();
    static int zxc();
};

そして今がポイントです。私は (プログラマーとして) 正確に「luaApi」という名前のクラスを作成したくありませんが、たとえば myClassForLuaApi. しかし、コードで明示的に書かれているため、今のところそれは不可能です-luaクラスで:

lua_register( luaState, "asd", luaApi::asd); 

次のように変更する必要があります。

lua_register( luaState, "asd", myClassForLuaApi::asd);

しかし、私はそうしたくありません (プログラマーがそこにアクセスできないと仮定しましょう)。

それでもわからなかったら諦めます。:)

ありがとう。

4

1 に答える 1

1

正しい署名 (別名)lua_register()を持っている限り、任意のメソッドを の 3 番目のパラメーターとして渡すことができるはずです。クラスの静的メンバーである必要はなく、任意のスタンドアロン関数にすることもできます。int (*)(lua_State *L)lua_CFunction

lua_register(luaState, "myFunction", &myFunction);

これで満足できない場合は、luaクラスなど、切り取った大きなコードを追加する必要があります。への呼び出しの新しいインスタンスをどのように追加しますlua_register()か? 定義済みのマクロを使用していますか? luaクラス内のコードを変更することはできませんか? 後者の場合、プリプロセッサ定義またはマクロを使用して名前を「曲げ」ない限り、何もできません。

編集:luaクラスのユーザーが独自の関数を登録できるようにしたい場合は、メソッドにパラメーターとして渡すことを許可する必要があります (基本的に、Lua も同様にこれを行います)。

void lua::registerFunction(const char *name, lua_CFunction *call) {
    lua_register(luaState, name, call);
}

Lua の状態オブジェクトを抽象化したい場合は、カスタム オブジェクト (luaオブジェクトとすべての引数を持ち、戻り値を処理する) を使用してユーザーの関数を呼び出す独自のラッパーを作成することも考えられます。

于 2012-06-29T09:02:58.110 に答える