我有一个抽象基类,称为Base
其他程序员要为其编写实现。在应用程序的其他部分,我想捕获所有已编写的实现并构造每个实现的单个实例。如果除了“实施基础”之外,无需向其他人提供额外的指示,这将是美好的。但是,我在下面的代码要求每个实现都注册自己。它也不起作用。
#include <iostream>
#include <vector>
class Base;
std::vector<Base*>* registrationList = new std::vector<Base*>;
class Base {
public:
Base(){}
virtual void execute() = 0;
};
class ImplementationOne: public Base {
public:
ImplementationOne(){registrationList->push_back(this);}
void execute(){std::cout << "Implementation One." << std::endl;}
static int ID;
};
class ImplementationTwo: public Base {
public:
ImplementationTwo(){registrationList->push_back(this);}
void execute(){std::cout << "Implementation Two." << std::endl;}
static int ID;
};
int main(int argc, const char * argv[]){
std::cout << "Registration List size: " << registrationList->size() << std::endl;
for(auto it = registrationList->begin() ; it != registrationList->end() ; ++it){
(dynamic_cast<Base*>(*it))->execute();
}
return 0;
}
我得到一个输出: Registration List size: 0
,所以很明显这些实现从来没有被实例化过。很明显这不会发生,但我是一个初学者,这是我能想到的最好的。我假设这static int ID;
将强制实例化每个实现,然后将它们自己注册。我可以看到static
不会导致实例化。我将它留在我的代码中,因为它显示了我的意图。
我该怎么做才能自动实例化每个实现?可能吗?