Przesunięcie od wskaźnika elementu bez tymczasowej instancji

Chciałbym uzyskać przesunięcie standardowej zmiennej składowej układu, gdy jest ona dostarczana z poinerem do tej zmiennej. Nie mogę użyćoffsetof ponieważ mam wskaźnik, a nie nazwę. Obecny kod, który mam, wygląda mniej więcej tak i zastanawiam się, czy istnieje zgodny ze standardami sposób na pozbycie się tegodummy zmienna.

template<class T>
struct {
  ptrdiff_t get_offset( int (T::*mem) )
  {
    T dummy;
    return reinterpret_cast<char*>(&(dummy.*mem)) 
      - reinterpret_cast<char*>(&dummy);
  }
};

Ta funkcja powinna być wywoływana tylko za pomocąint punkty zmiennych członkowskich (jest to celowe).

Jestem całkowicie pewien, że kompilator tak naprawdę nie tworzydummy zmienna, ale nadal byłoby miło, gdybym mógł się jej pozbyć. Nie mogę użyć wskaźnika pustego, ponieważ nie wyszczególnienie wartości null nie jest zdefiniowane (chociaż prawdopodobnie działa na wszystkich popularnych kompilatorach). Rozwiązanie C ++ 03 byłoby dobre, lub rozwiązanie C ++ 11 jest również interesujące (ale nie nadaje się do użytku teraz).

UWAGA: Już zdaję sobie sprawę, że tylko standardy są zgodne z T to standardowy typ układu.

questionAnswers(3)

yourAnswerToTheQuestion