我声明了很多类,它们都继承自一个基类(某种抽象类)...所以它们都有我想使用的通用方法...
现在,我需要一个类列表(不是对象),稍后在循环中创建它们的实例并使用这些实例来调用提到的通用方法。 ..
伪代码
class Abstract {
void Something();
}
class TaskOne : public Abstract {
void Something(); // method implemented somewhere below
}
class TaskTwo : public Abstract {
void Something(); // method implemented somewhere below
}
...
list<Abstract> lst;
lst.push_back(TaskOne); // passing class type, not instance!
lst.push_back(TaskTwo);
Abstract tmpObject = new lst[0]; //I know its wrong, just a way of expressing what I'd like to do to have instance of TaskOne!
请给任何提示......
最佳答案
您可以创建一个模板化的工厂对象:
struct IFactory { virtual IBaseType* create() = 0; };
template< typename Type > struct Factory : public IFactory {
virtual Type* create( ) {
return new Type( );
}
};
struct IBaseType { /* common methods */ virtual ~IBaseType(){} };
IFactory* factories[] = {
new Factory<SubType1>
, new Factory<SubType2>
// ...
};
std::vector<IBaseType*> objects;
objects.push_back( factories[1]->create() ); // and another object!
// don't forget to delete the entries in the
// vector before clearing it (leak leak)
关于C++、oop、类列表(类类型)和创建它们的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883862/