我有这样的事情:
class Object{
A a;
B b;
C c;
}
某个名为Object的类,它有三个属性。在我的案例中,A,B和C是结构。 Object的构造函数看起来像这样:
Object::Object(A a, B b, C c)
{
this->a = a;
this->b = b;
this->c = c;
}
我试图达到的目的是,用户可以调用Object的构造函数并设置其中的任何值,而其余的值应该保留一些默认值。
例如,那些函数调用应该以某种方式工作:
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 ++默认参数。这没有用,因为如果没有为A()提供值,就不可能为B()提供用户定义的值。
无论如何,上面的代码只是一个简化的例子。我的代码应该是可扩展的。将来可能会有超过三个值的对象,我不想为每个可能的调用案例创建不同的构造函数。
你对此有什么想法吗?有可能这样做吗?
答案 0 :(得分: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.
}