3

次のものがあるとしましょう。

(1)C2人のメンバーX1 x1Y1 y1
(2)Cデフォルトのコンストラクターはありませんが、コンストラクターはありますC(Z)。(3)デフォルトのコンストラクターはないが、コンストラクターを持つ
クラス。(4)デフォルトのコンストラクターはないが、コンストラクターを持つ クラス。 (5)を返す関数X1X1(X2)
Y1Y1(Y2)
f(Z)std::pair<X2, Y2>

としましょうf(z) -> std::pair<X2, Y2>{x2,y2}

CそのメンバーX1 x1 == X1(x2)Y1 y1 == Y1(y2)構築後のクラスを作成するにはどうすればよいですか?

4

1 に答える 1

4

C ++ 11では、次の委任コンストラクターを追加できますC

class C {
  X1 x1; Y1 y1;
public:
  C(Z z): C(f(Z)) {}
private:
  C(std::pair<X2, Y2> p): x1(p.first), x2(p.second) {}
};

委任コンストラクターを使用できない場合、これを行う唯一の方法は、メンバーをヘルパークラスに移動し、コンストラクターの継承と追加を行うことBです。CBZ

struct B {
  X1 x1; Y1 y1;
  B(std::pair<X2, Y2> p): x1(p.first), x2(p.second) {}
};
class C: private B {
  public:
  C(Z z): B(f(Z)) {}
};
于 2012-11-02T09:05:23.103 に答える