想象一下,在框架中有一个基类,它定义了几个纯虚方法,它实际上是一个接口。这个类的用户继承它并像往常一样实现它的方法。
我想要获得的是为框架提供一种机制,通过统一的工厂方法实例化派生类,该方法返回派生类的实例。
我想在基类中放置一个静态base* get_one()
方法来重新实现,但当然,它是静态的,它不能是虚拟的。
最终目标是为所谓的驱动程序提供基类,以便用户可以编写自己的实现,并且当被要求时,框架可以使用该特定驱动程序返回设备实例。
答案 0 :(得分:1)
一种简单的(我认为常见的)方法是注册" (抽象)基类的派生类的实例,然后用作工厂。然后,您可以决定驱动程序是单例还是实例是"模板"每次呼叫者请求驱动程序时从中抽取副本。 一个简单的实现可能如下所示:
// Framework part:
class Driver {
public:
static Driver* getDriver() {
return driver; // return the instance (or make a copy, if desired)
};
static void registerDriver(Driver *driver) {
Driver::driver = driver;
}
private:
static Driver *driver;
};
Driver *Driver::driver = nullptr;
// Customization part:
class MyDriver : public Driver {
};
MyDriver mySingleDriver;
int main()
{
Driver::registerDriver(&mySingleDriver);
return 0;
}
在制作中,您可能会使用托管指针并实施更复杂的单身"做法。但原则应该是明确的......