2015-02-04 2 views
-3

У меня есть две разные структуры. Оба имеют некоторые члены одного типа &.Как скопировать членов с одинаковыми именами в разные структуры?

Как я могу скопировать все соответствующие члены одновременно?

struct a{ int i, int j}; 
struct b{ int j, int k}; 

Я хочу выполнить a=b, вид операции, где b.j копируются в a.j. Как мудрый, как должны быть скопированы любые соответствующие члены?

+0

'memcpy (& a, & b, sizeof (a));'? – Cyclonecode

+1

@Cyclone, «У меня две структуры __different__. У обоих есть __some__ членов одного типа и имени». Я думаю, что это означает, что они не совсем то же самое (что значит иметь 2 одинаковых структуры?) – SingerOfTheFall

+1

Напишите функцию для копирования из a в b. В C++ вы можете вызвать эту функцию a :: operator = –

ответ

3

Просто сделайте оператор присваивания, и скопировать все, что вы хотите там

struct a{ int i; int j; }; 
struct b{ 
void operator=(const a & other) 
{ 
    j = other.j; 
} 
int j; 
int k; 
}; 

Тогда вы можете просто написать

a one; 
b two; 
two = one; 
3

Поскольку есть некоторый набор соответствующих членов одного и того же типа может быть, решение состоит в том, чтобы упаковать их вместе в общий тип.

struct c{ int i, int j}; 
struct a{ c common, int k, int l, ..., double u}; 
struct b{ c common, int a, int b, ..., float u, int v}; 

a one; 
b two; 

one.common = two.common; 

Если это невозможно, потому что вы не можете изменить код таким образом, то я хотел бы предложить, чтобы написать какую-то функцию копирования, но не оператор присваивания, потому что через некоторое время вы или кто-то другой может и, вероятно, будет использовать это задание неправильно , думая, что он копирует всех членов.

void copySharedMembersOfAB(a&, a const& b) 
{ 
    a.i = b.i; 
    a.j = b.j; 
} 
+0

Упрощенный, но вы можете улучшить ясность, переименовав элементы 'struct a' и' struct b' (кроме 'common'), чтобы они не соответствовали друг другу или членам' struct c'. – davmac

+0

@ davmac конечно, сделано – 4pie0

Смежные вопросы