C++ C+中的可扩展工厂方法+; 问题

C++ C+中的可扩展工厂方法+; 问题,c++,inheritance,polymorphism,factory,C++,Inheritance,Polymorphism,Factory,想象一下,在一个框架中有一个基类,它定义了几个纯虚拟方法,实际上是一个接口。这个类的用户继承自它,并像往常一样实现它的方法 我试图获得的是为框架提供一种机制,通过返回派生类实例的统一工厂方法实例化派生类 尝试 我曾想过在要重新实现的基类中放置一个静态的base*get_one()方法,但当然,作为静态的,它不能是虚拟的 目标 最终的目标是为所谓的驱动程序提供一个基类,这样用户就可以编写自己的实现,并且当要求框架这样做时,框架可以使用该驱动程序返回设备实例。一种简单(我认为是常见的)方法是在(抽象

想象一下,在一个框架中有一个基类,它定义了几个纯虚拟方法,实际上是一个接口。这个类的用户继承自它,并像往常一样实现它的方法

我试图获得的是为框架提供一种机制,通过返回派生类实例的统一工厂方法实例化派生类

尝试 我曾想过在要重新实现的基类中放置一个静态的
base*get_one()
方法,但当然,作为静态的,它不能是虚拟的

目标 最终的目标是为所谓的驱动程序提供一个基类,这样用户就可以编写自己的实现,并且当要求框架这样做时,框架可以使用该驱动程序返回设备实例。

一种简单(我认为是常见的)方法是在(抽象)基类中“注册”派生类的实例,然后作为一个工厂。然后,您可以决定驱动程序是单例还是实例是一个“模板”,每次调用方请求驱动程序时都会从中提取副本。 一个简单的实现可以如下所示:

// 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;
}

在生产中,您可能会使用托管指针并实现更复杂的“单例”方法。但原则应该是明确的……

尽管这个问题可能很愚蠢,但我无法理解否决票。我试着用所有需要的细节详细解释问题和目标。你看过所有的吗?它如何知道要使用哪个派生类?一个id/密钥(以前用某种机制注册)传递到工厂就可以了。问题是有n个驱动程序和n*m个可能的设备。“驱动程序”只是许多可能的驱动程序的基类,因此需要一个“可扩展”工厂。这个“解决方案”只考虑一个派生类。