Здравствуйте, Аноним, Вы писали:
А>Как в структуру
А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?
ну типа
A& operator = ( const B& _value )
{
........
}
Здравствуйте, Аноним, Вы писали:
А>Как в структуру
А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?
Определить метод присваивания:
struct1 &operator = ( const struct2 &rgt )
{
memcpy( this, &rgt, std::min( sizeof(*this), sizeof(rgt) ) );
}
Но это катит только для POD-типов
Здравствуйте, Аноним, Вы писали:
А>Как в структуру
А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?
Можно использовать union на свой страх и рист (по причине UB):
union
{
S1 a;
S2 b;
} u;
u.b = *B;
u.a.x = 1;
Здравствуйте, Аноним, Вы писали:
А>Как в структуру
А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?
Еще прокатит:
*A=(struct1&)*B;
, или, более по-научному, но все еще коряво:
*A = reinterpret_cast<struct1&>( *B );