3

これがコードスニペットです

#include <iostream>
struct Z
{
   Z():x(0),y(0),z(x){}
   ~Z(){}

   int x;
   int y;
   int &z; // Reference member
};
template <typename Type, typename C, typename M>
size_t Offsetof (M C::* ptr_to_member)
{
  Type type;
  return reinterpret_cast<char*> (&(type.*ptr_to_member)) - reinterpret_cast<char*> (&type);
}
int main()
{
   std::cout << Offsetof<Z>(&Z::x); // works
   std::cout << Offsetof<Z>(&Z::y); // works 
   std::cout << Offsetof<Z>(&Z::z); // doesn't work
}

参照へのポインタを作成できないため、関数は。に対して機能しOffsetofませんz

非PODの参照データメンバーのオフセットを取る方法はありますか?

4

1 に答える 1

5

いいえ。参照はオブジェクトではなく、存在しないか、アドレスまたはオフセットがありません。メンバー参照へのポインターは不正です。

于 2012-11-26T10:29:44.380 に答える