Re[3]: указатель на под-член
От: tyomitch  
Дата: 17.12.09 13:23
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Можно, конечно. Я специально слегка усложнил — переставил местами родителей


PD>
PD>#include "stdafx.h"
PD>#include "stddef.h"

PD>struct A { float w; int x; } ;
PD>struct B { char y; } ;
PD>struct C : public B, public A { } ;

PD>int _tmain(int argc, _TCHAR* argv[])
PD>{
PD>    // хочу доступ к C::A::x

PD>    C c;
PD>    B* pB = (B*)&c;
PD>    A* pA = (A*)&c;
PD>    int offsetAinC = (char*) pA - (char*) pB; // а вот в этом быть уверенным я не могу ИМХО. Или могу ? Знатоки стандарта, ответьте!
PD>    int mem = offsetAinC + offsetof(A,x) ;
PD>    int C::* p = (int C::*&) mem;
PD>    c.*p = 123;
PD>    return 0;
PD>}

PD>


PD>Но вообще — безобразие все это. Грязный хак, вполне согласен с rg45.


Не совсем то, что я имел в виду (мне нужен был C::A, а не C::A::x), но идея понятна.

Кстати, в gcc (и вроде бы стандартом тоже) запрещены касты из int в (int C::*&); ради такого преобразования предыдущим отписавшимся в треде и пришлось городить чёрти-что из шаблонов и юнионов.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.