struct A
{
unsigned int m_uiField;
};
struct B : A
{
virtual void VirtualMethod() { }
};
int main()
{
A instance_a;
B instance_b;
unsigned int A::* ptrA = &A::m_uiField;
unsigned int B::* ptrB = &B::m_uiField;
// application:
unsigned int value = instance_a.*ptrA;
value = instance_b.*ptrA;
//value = instance_a.*ptrB; // incompatible types
value = instance_b.*ptrB;
// also:
A* dynamic = new B();
value = dynamic->*ptrA; // etc
}
c3RydWN0IEEKewogICAgdW5zaWduZWQgaW50IG1fdWlGaWVsZDsKfTsKCnN0cnVjdCBCIDogQQp7CiAgICB2aXJ0dWFsIHZvaWQgVmlydHVhbE1ldGhvZCgpIHsgfQp9OwoKaW50IG1haW4oKQp7CiAgICBBIGluc3RhbmNlX2E7CiAgICBCIGluc3RhbmNlX2I7CgogICAgdW5zaWduZWQgaW50IEE6OiogIHB0ckEgPSAmQTo6bV91aUZpZWxkOwogICAgdW5zaWduZWQgaW50IEI6OiogIHB0ckIgPSAmQjo6bV91aUZpZWxkOwoKICAgIC8vIGFwcGxpY2F0aW9uOgogICAgdW5zaWduZWQgaW50IHZhbHVlID0gaW5zdGFuY2VfYS4qcHRyQTsKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc3RhbmNlX2IuKnB0ckE7CiAgICAgICAgICAgICAgIC8vdmFsdWUgPSBpbnN0YW5jZV9hLipwdHJCOyAvLyBpbmNvbXBhdGlibGUgdHlwZXMKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc3RhbmNlX2IuKnB0ckI7CgogICAgLy8gYWxzbzoKICAgIEEqIGR5bmFtaWMgPSBuZXcgQigpOwogICAgdmFsdWUgPSBkeW5hbWljLT4qcHRyQTsgLy8gZXRjCn0K