2017-10-20 38 views
1

次の問題に対する解決策があるかどうか、ほとんど同じ構造体が2つあり、構造体Aから構造体Bに値を渡す必要があります。今、構造体AとBはほぼ同様ではなく、正確であり、私たちは、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; 

例は、私はこれらの構造体を持って次のようになりますfollowinglyメンバーによるメンバー値:

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

そして今、bが持っていたと私は、他のメンバーを取り込むことができ、すべての情報を持っています。だから私の問題は、構造体の最初のメンバーだけが変わるので、30〜40回程度、別の構造体でこれをやらなければならないということです。 b個別に?

+0

同じメンバーを含む1つの基本クラスを作成し、コピーを実装します。 "ほぼ同じ"はあなたに多く役立ちません – user463035818

+1

既存の構造定義を変更できますか? – nate

+0

いいえ、ドライバにあり、ソースコードにアクセスできないので、既存の構造を編集できません:( – Pedro

答えて

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; 
    } 
}; 

このアイデアを内側のクラスにも拡張できます。

+0

ちょっと、 私は慎重に私の問題を記述しようとしましたが、忘れました。私が渡さなければならないすべての異なる構造体の間で、それぞれの "body"メンバが異なっていることを明確にしています。したがって、このメソッドを使用すると、それぞれについて同様の解決策を実行する必要があり、その場合には、私は、何とかそれを自動化する方法があると思った – Pedro

関連する問題