私がやろうとしているのは、基本的に関数を呼び出して、C++ 関数を lua に登録できるようにすることです。基本的には registerFunction(function) のようなものです。さて、これを行うライブラリがあることは知っていますが、誰かがそのようなライブラリを作成する方法を知りたいです。
私の現在の方法は、テンプレートを使用して、渡される関数に関連するグルー関数を生成することです。
私のコードは今次のようになります:
template<typename F>
struct registerStruct
{
template<typename T>
struct inner
{
static int func(lua_State*);
};
};
template<typename F>
void registerFunction(const char *name,F function)
{
lua_register(this->L,name,®isterStruct<decltype(function)>::inner<function>::func);
}
template<typename F>
struct registerStruct<F(void)> //I would write more classes for different numbers of arguments
{
template<F(*T)(void)>
struct inner
{
static int func(lua_State *L)
{
returnLua(L,T()); //push the return value onto lua's stack
return 1;
}
};
};
次に、次のように使用しようとします。
int test(void)
{
std::cout<<"hello from c++"<<std::endl;
return 0;
}
registerFunction("test",test);
gcc でコンパイルすると、エラー ::func が宣言されていません。