2014-11-15 112 views
0

我有這樣的事情:多,不同的構造函數作爲函數參數

class Object{ 
    A a; 
    B b; 
    C c; 
} 

某一類叫做對象,其中有三個propertys。 A,B和C是我的結果。 對象的構造看起來是這樣的:

Object::Object(A a, B b, C c) 
{ 
    this->a = a; 
    this->b = b; 
    this->c = c; 
} 

,而剩下的人應該留一些默認的什麼我嘗試達到是,用戶可以調用對象的構造函數,並設置這些值,值。

例如那些函數調用應該得到某種工作:

int main() { 
    Object(A(),B(),C()); 
    Object(A());   // B and C stay on some default value 
    Object(A(),C());  // B stays on some default value 
} 

我媒體鏈接與C++默認參數嘗試過。這是行不通的,因爲不可能爲B()提供用戶定義的值而不爲A()提供值。

無論如何,上面的代碼只是一個簡單的例子。我的代碼應該是可擴展的。將來可能會有超過三個值的對象,我不想爲每個可能的呼叫情況創建不同的構造函數。

你有什麼想法嗎?有沒有可能做到這一點?

回答

1

嘗試建造者模式,檢查它wikipedia,就在這裏SO,但another reference

對於C++中,它會是這樣的:

class A; 
class B; 
class C; 

class Obj { 
    static Obj Obj::Build() { return Obj(); } 

    Obj & SetA(...) { ... } 
    Obj & SetB(...) { ... } 
    Obj & SetC(...) { ... } 

    //... 
}; 

main() { 
    Obj o = Obj::Build() 
     .SetA(<params to A>) 
     .SetC(<params to c>); 
    //Note: B was not named. 
}