У меня есть что-то вроде этого:
class Object{
A a;
B b;
C c;
}
Определенный класс Object, который имеет три свойства. 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().
В любом случае, приведенный выше код является просто упрощенным примером. Мой код должен быть расширяемым. В будущем могут быть объекты с более чем тремя значениями, и я не хочу создавать другой конструктор для каждого возможного случая вызова.
У вас есть идеи по этому поводу? Есть ли возможность сделать это?
Попробуйте шаблон строителя, проверьте его на википедии, прямо здесь, на qaru.site/questions/16242/... и еще одну ссылку:
Для 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.
}