Я изучал, как получить смещение памяти члена в классе на С++ и наткнулся на это на wikipedia:
В коде С++ вы не можете использовать 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, либо я пропускаю еще одну часть головоломки. Я не понимаю, в чем проблема.