Я изучал, как получить смещение памяти члена класса в C ++, и наткнулся на это в wikipedia:
В коде C ++ нельзя использовать offsetof для доступа к членам структур или классов, которые не являются простыми старыми структурами данных.
Я попробовал, и, кажется, работает нормально.
class Foo
{
private:
int z;
int func() {cout << "this is just filler" << endl; return 0;}
public:
int x;
int y;
Foo* f;
bool returnTrue() { return false; }
};
int main()
{
cout << offsetof(Foo, x) << " " << offsetof(Foo, y) << " " << offsetof(Foo, f);
return 0;
}
Я получил несколько предупреждений, но он скомпилирован и при запуске выдает разумный вывод:
Laptop:test alex$ ./test
4 8 12
Я думаю, что я либо неправильно понимаю, что такое структура данных POD, либо мне не хватает какой-то другой части головоломки. Я не вижу, в чем проблема.