我要做的基本上是能够调用一个函数并让它用lua注册一个c++函数。基本上类似于 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 尚未声明。