在几乎相同的结构之间传递成员值

时间:2017-10-20 13:43:12

标签: c++ struct member

我想知道是否有人解决了以下问题,我有两个几乎相同的结构,我需要将结构A中的值传递给结构B,它们有一个成员的差异。

示例看起来像这样我有这些结构:

struct insideA
{
double C1;
double C2;
int C3;
str C4;
};

struct insideB
{
int D3;
str D4;
};   

struct A
{
insideA inA; 
double c;
std::string d;
} a;

struct B
{
insideB inB;
double c;
std::string d;
} b;

现在结构A和B几乎相似但不完全相同,如果我们想象b已填充,我可以随后轻松地按成员传递值成员:

a.inA.C3 = b.inB.D3;
a.inA.C4 = b.inB.D4;
a.c = b.c;
a.d = b.d;

现在a拥有b所拥有的所有信息,我可以填充其他成员。所以我的问题是我必须使用不同的结构执行大约30或40次,其中只有结构的第一个成员发生更改,所以有没有更好的方法来执行此操作,而不是将值的struct成员传递给结构成员b个别?

1 个答案:

答案 0 :(得分:1)

让我们使用模板!

template <struct Inside>
struct AorB
{
  Inside in; 
  double c;
  std::string d;

  template <struct OtherInside>
  AorB& operator=(const AorB<OtherInside>& that) {
    in = that.in;
    c = that.c;
    d = that.d;
  }
};

struct A : AorB<insideA>
{
  template <struct OtherInside>
  A& operator=(const AorB<OtherInside>& that) {
    AorB<insideA>::operator=(that);
    return *this;
  }
};

struct B : AorB<insideB> 
{
  template <struct OtherInside>
  B& operator=(const AorB<OtherInside>& that) {
    AorB<insideB>::operator=(that);
    return *this;
  }
};

你也可以将这个想法扩展到内部类。