如何在基类的构造函数中要求派生类定义的对象

时间:2017-01-05 03:00:23

标签: c++ design-patterns

我希望有一个泛型类,它在模板方法模式中强制执行派生类的规则,但我想避免两阶段初始化,因为我不希望对象在可能的情况下处于部分无效状态。基类需要一个“Thing”,它也是将以多态方式使用的通用类。单独的工厂是不合适的,因为我还不知道派生类是什么。

这是我使用函数指针创建的,派生类在构造期间向下传递给它的基类,因此它可以具有Thing,这样派生对象在没有有效Thing的情况下永远不会存在。我想知道在C ++中是否有更好的方法可以做到这一点,因为这看起来非常糟糕?

编辑:在没有函数指针的情况下纠正了更好的语法。我认为这是最简单的方法。

class Thing {};

class Base {
public:
    Base(Thing* thing): mustHaveThing(thing) {};
    virtual ~Base() { delete mustHaveThing; };

private:
    Thing* mustHaveThing;
};

class Derived: Base {
public:
    Derived(): Base(createThing()) {};

private:
    static Thing* createThing() {
        return new Thing;
    }
};

0 个答案:

没有答案