同じシグネチャの C 関数が多数あり、それらを Lua に登録したいとします。たとえば、各関数は次のようになります。
void foo(int n)
{
// do some work
}
それぞれを次のように登録できます。
int wrap_foo(Lua_State *l)
{
int x = lua_tonumber(l, 1);
foo(x);
return 0;
}
lua_pushcfunction(l, wrap_foo);
lua_setglobal(l, "foo");
問題は、コードの繰り返しを避けるために次の関数を実装する方法です。
void register(Lua_State *l, const char *name, void (*f)(int));
おそらく、プリプロセッサ マクロを使用して実行できます (コンパイル時のみ)。もっとエレガントな方法はありますか?外部バインディング ライブラリを使用しないソリューションを希望します。