Desplazamiento desde el puntero del miembro sin instancia temporal
Me gustaría obtener el desplazamiento de una variable de miembro de diseño estándar cuando se proporciona un poiner a esa variable. No puedo usaroffsetof
Ya que tengo un puntero y no un nombre. El código actual que tengo se parece a esto, y me pregunto si hay una manera que cumpla con los estándares para deshacerse de ladummy
variable.
template<class T>
struct {
ptrdiff_t get_offset( int (T::*mem) )
{
T dummy;
return reinterpret_cast<char*>(&(dummy.*mem))
- reinterpret_cast<char*>(&dummy);
}
};
Esta función solo debe ser invocable conint
puntos de la variable miembro (esto es intencional).
Estoy bastante seguro de que el compilador en realidad no crea eldummy
variable, pero aún sería bueno si pudiera deshacerme de ella. No puedo usar un puntero nulo ya que la desreferenciación nula no está definida (aunque probablemente funcione en todos los compiladores comunes). Una solución de C ++ 03 sería buena, o una solución de C ++ 11 también es de interés (pero ahora no la puedo usar).
NOTA: Ya sé que esto solo cumple con los estándares si T es un tipo de diseño estándar.