我有类 SmallClass
和 BigClass
。 BigClass
作为私有(private)属性,它是 SmallClass
的一个对象。我读过有关初始化列表的内容,但问题是我无法预测需要传递给 SmallClass
的构造函数的值。代码看起来像这样:
class SmallClass {
public:
SmallClass(int);
private:
int boo;
}
SmallClass::SmallClass(int i) {
boo = i;
}
class BigClass {
public:
BigClass();
private:
SmallClass sc; // I guess this calls the constructor (and does not compile)
};
BigClass::BigClass() {
int foo;
/* Do stuff. I end up with a "foo" having a non predictable value. */
sc = SmallClass(foo); /* Is there a way to do something like this? */
}
最佳答案
Is there an alternative to initializer lists?
是的。默认成员初始化器是初始化器列表的替代方法。但是,这对您的情况没有用。事实上,它仅在构造函数的参数可预测时才有用。
foo
的“不可预测性”对于初始化程序 lits 来说不是问题;您不需要其他选择。只需调用一个函数:
int get_foo() {
int foo;
/* Do stuff. I end up with a "foo" having a non predictable value. */
return foo;
}
BigClass::BigClass() : sc(get_foo()) {}
如果“do stuff” 包括对成员的访问(示例中没有其他成员,我认为这可能是一种简化),那么您可以使用成员函数来实现它。但是,请记住,您只能访问在 sc
之前初始化的成员。
关于c++ - 是否有初始化列表的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49318777/