在构造函数中通过setter初始化对象

时间:2018-03-19 08:53:57

标签: c++ constructor initialization setter

有没有更好的方法在初始化期间调用外部setter而不是在构造函数体中执行它?

示例:

struct Foo {
    Foo()
        : object(someValue)
        // can't do this:
        // , object.setProperty(differentValue)
    {
        // have to call it here
        object.setProperty(differentValue);
    }
}

假设object类是外部的,无法修改以防止必须使用setter。

1 个答案:

答案 0 :(得分:0)

还有另一种方式,但我不会说它更好。

您的代码中可以有另一个结构:

struct Helper {
    Helper(Object &object, int differentValue) {
        object.setProperty(differentValue);
    }
}

并在Foo

struct Foo {
    Object object;
    Helper helper; // after object

    Foo() : object(someValue), helper(object, differentValue) {
    }
}

但这只是一个技巧,无论如何都不是更好。

您还可以从Foo继承Helper,而不是helper成为Foo的成员。