Rzucanie między void * a wskaźnikiem do funkcji członka

Obecnie używam GCC 4.4, a pomiędzy nimi mam dość kłopotówvoid* i wskaźnik do funkcji członka. Próbuję napisać łatwą w użyciu bibliotekę do powiązania obiektów C ++ z interpreterem Lua w ten sposób:

LuaObject<Foo> lobj = registerObject(L, "foo", fooObject);
lobj.addField(L, "bar", &Foo::bar);

Zrobiłem większość tego, z wyjątkiem następującej funkcji (która jest specyficzna dla określonej sygnatury funkcji, dopóki nie mam szans jej uogólnienia):

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;
}

Dla tych, którzy nie znają Lua,lua_touserdata(L, lua_upvalueindex(1)) pobiera pierwszą wartość związaną z zamknięciem (w tym przypadku jest to wskaźnik do funkcji składowej) i zwraca ją jakovoid*. GCC narzeka na tovoid* ->void (T::*)(int, int) to nieprawidłowy rzut. Jakieś pomysły na obejście tego problemu?

questionAnswers(5)

yourAnswerToTheQuestion