我有两种不同的结构。两者都有一些相同类型的成员和名。
如何一次性复制所有匹配的成员?
struct a{ int i, int j};
struct b{ int j, int k};
我想执行a=b
这种操作,b.j
被复制到a.j
。
同样明智的是,如何复制这些匹配成员?
答案 0 :(得分: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;
答案 1 :(得分: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;
}