다중 상속을 가진 클래스에서 데이터 멤버에 대한 포인터를 얻는 방법이 있는지 확인하려고합니다. 모호성을 제거하고 올바른 오프셋을 얻는 방법이 있습니까?상속 된 데이터 멤버에 대한 포인터 다중 상속
struct Foo
{
int BarData;
};
struct FooBarBaseA : public Foo
{
int DataA;
};
struct FooBarBaseB : public Foo
{
int DataB;
};
struct FooBar : public FooBarBaseA, public FooBarBaseB
{
};
Bar FooBar::* p1 = &FooBar::FooBarNodeA::BarData; // should be 0?
Bar FooBar::* p2 = &FooBar::FooBarNodeB::BarData; // should be 4 or 8?
편집 : 나는 그들이이 개 독립적 인 값이되고 싶지 않지만, 모두
int FooBar::FooBarBaseA::Foo:: *p1 = &FooBar::FooBarBaseA::Foo::BarData; and
int FooBar::FooBarBaseB::Foo:: *p2 = &FooBar::FooBarBaseB::Foo::BarData;
가 같은 값을 yeild 상속 트리가 가상이 아닌 경우, 서로 다른 오프셋 안?
당신은 그들이이 작은 프로그램을 사용하여 다른 오프셋 얻을 것을 볼 수있다 :'는 foobar의 X를; ptrdiff_t d1 = (char *) & x.FooBarBaseA :: BarData - (char *) & x; ptrdiff_t d2 = (char *) & x.FooBarBaseB :: BarData - (char *) & x; cout << hex << d1 << ""<< hex << d2 << endl;'멤버에 대한 포인터를 얻는 것이 효과적이지 않습니다 - 내가 시도한 모든 컴파일러에서 모호한 오류가 발생합니다. – dasblinkenlight