Conversión entre void * y un puntero a la función miembro

Actualmente estoy usando GCC 4.4, y tengo bastante dolor de cabeza entrevoid* y un puntero a la función miembro. Estoy tratando de escribir una biblioteca fácil de usar para vincular objetos C ++ a un intérprete de Lua, así:

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

Lo he hecho casi todo, excepto por la siguiente función (que es específica de cierta firma de función hasta que tengo la oportunidad de generalizarla):

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

Para aquellos de ustedes que no están familiarizados con Lua,lua_touserdata(L, lua_upvalueindex(1)) obtiene el primer valor asociado con un cierre (en este caso, es el puntero a la función miembro) y lo devuelve como unvoid*. GCC se queja de quevoid* ->void (T::*)(int, int) es un elenco no válido. ¿Alguna idea sobre cómo solucionar esto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta