Re[3]: Конвертация типа указателя
От: awqez  
Дата: 06.05.13 16:36
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Здравствуйте, ArtDenis, Вы писали:


AD>>Код опасный. Лучше делать так:


AD>>
AD>>int a;
AD>>double b;

AD>>typedef boost::variant<int, double> IntOrDouble;
AD>>void cr(IntOrDouble &value)
AD>>{
AD>>    value = a;
AD>>    value = b;
AD>>}
AD>>

M>Таки да.

AD>>Ну если уж совсем сильно хочется, то вот:

AD>>
AD>>int a;
AD>>double b;
AD>>void cr(char *adr)
AD>>{
AD>>    *reinterpret_cast<int*>(adr) = a;
AD>>    *reinterpret_cast<double*>(adr) = b;
AD>>}
AD>>

M>Только если там с выравниванием всё в порядке. По-хорошему бы иметь гарантию, что adr когда-то был указателем именно на int или double.

здесь мне предложили вот так сделать

*((int*)(*wtadr)) = a;
*((double*)(*wtadr)) = b;

вызывает ошибку — "программа вызвала ошибку" и т. д. почему так вроде и нудно преопределять типы.
а как Mazay предложил работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.