C++、oop、类列表(类类型)和创建它们的实例

标签 c++ oop

我声明了很多类,它们都继承自一个基类(某种抽象类)...所以它们都有我想使用的通用方法...

现在,我需要一个列表(不是对象),稍后在循环中创建它们的实例并使用这些实例来调用提到的通用方法。 ..

伪代码

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/

相关文章:

php - 上传文件不支持ajax

c++ - C 和 C++ 标准对假设的三元硬件架构的适应性如何?

c++ - 在 C 中的 _asm block 中使用局部变量

c++ - 出现 “void* is not a pointer-to-object type”错误,但使用XCode时代码可以完美执行

c++ - 如何为 MinGW 项目设置 OpenCV?

ios - 强制 subview Controller 调用基本 View Controller 方法

c++ - 如何向 QPushButton 添加悬停过渡?

oop - 在 UML 类图中,组合可以是双向的吗?

c# - 添加实际不会使用的接口(interface)

delphi - 接口(interface)和属性可见性