我希望有一个泛型类,它在模板方法模式中强制执行派生类的规则,但我想避免两阶段初始化,因为我不希望对象在可能的情况下处于部分无效状态。基类需要一个“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;
}
};