我目前使用的是 GCC 4.4,我遇到了一个棘手的问题,就是在void*
和成员函数指针之间进行类型转换时困难重重。我正在尝试编写一个易于使用的库,将 C++ 对象绑定到 Lua 解释器上,如下所示:
LuaObject<Foo> lobj = registerObject(L, "foo", fooObject);
lobj.addField(L, "bar", &Foo::bar);
我已经完成了大部分工作,只有以下函数还未完成(它是特定函数签名的,直到我有机会将其泛化):
template <class T>
int call_int_function(lua_State *L)
{
// this next line is problematic
void (T::*method)(int, int) = reinterpret_cast<void (T::*)(int, int)>(lua_touserdata(L, lua_upvalueindex(1)));
T *obj = reinterpret_cast<T *>(lua_touserdata(L, 1));
(obj->*method)(lua_tointeger(L, 2), lua_tointeger(L, 3));
return 0;
}
如果您对Lua不熟悉,lua_touserdata(L, lua_upvalueindex(1))
获取与闭包关联的第一个值(在这种情况下,它是成员函数指针),并将其作为void*
返回。GCC抱怨void*
-> void (T::*)(int, int)
是无效的转换。有什么办法可以解决这个问题吗?