3

假设我们有以下内容:

(1)C有两个成员X1 x1和的类Y1 y1
(2)C没有默认构造函数,但有构造函数C(Z)
(3) 一个X1没有默认构造函数,但是有构造函数的类X1(X2)
(4) 一个Y1没有默认构造函数,但是有构造函数的类Y1(Y2)
(5) 一个函数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并编写C继承自B并添加构造函数 from Z

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 回答