2014-11-15 2 views
0

я получил что-то вроде этого:Multiple, варьируя Конструкторы в качестве параметров функции

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 
} 

Я Allready пробовал с параметрами 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. 
} 
Смежные вопросы