Здравствуйте, tyomitch-cs, Вы писали:
TC>Здравствуйте.
TC>У меня есть, к примеру:
TC>TC>struct A { float w; int x; } ;
TC>struct B { char y; A z; } ;
TC>int B::* p;
TC>B b;
TC>
TC>Как мне теперь в переменную p запихнуть адрес поля B::z.x?
TC>Так, чтобы b.*p было эквивалентно b.z.x
Как-то чересчур уж жестко вопрос поставлен. Цель поставлена четко:
чтобы было эквивалентно b.z.x. Форма выражения задана строго:
b.*p. Определение
p тоже не двусмысленно:
int B::* p. Никакой степени свободы. В такой постановке вопроса ответ один: никак.
TC>Если, по логике вещей, указатель на член -- это просто смещение от начала структуры, то это должно быть возможно, разве нет?
Внутреннее устройство данных и то, как они расположены в памяти, в данном случае не имеют никакого значения, мало ли что с чем совпадает во внутреннем представлении. Здесь все упирается в семантику объявлений и выражений —
int B::* обозначает:
член класса B типа int, и не может быть использован для обращения к членам ни других типов, ни других классов.
Если хочешь получить дельную подсказку, опиши задачу немного более верхнего уровня.