2012-11-02 57 views
3

構建類比方說,我們有以下幾點:有兩個成員

(1),它有兩個成員X1 x1Y1 y1C類。
(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)施工後?

+1

...和想法是你不想叫'F'兩次? – jogojapan

+0

在這種情況下,'f'不純,所以調用'f'兩次會導致兩個不一致的結果。 – Clinton

回答

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類寫CB繼承和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)) {} 
}; 
相關問題