假设我们有以下内容:
(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)
?
答案 0 :(得分: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
的{{1}}并添加构造函数B
:
Z