【发布时间】:2009-12-10 20:40:12
【问题描述】:
我声明了很多类,它们都继承自一个基类(某种抽象)......所以它们都有我想使用的通用方法......
现在,我需要一个 classes(not 对象)的列表,然后在循环中创建它们的实例,并使用这些实例来调用提到的常用方法。 ..
伪代码
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!
请给点建议...
【问题讨论】:
-
Boost MPL 是一种方法。见http://stackoverflow.com/questions/1185464
-
MPL 实在是太矫枉过正了,要一个人必须是虐待狂才能学习它(我就是其中之一)。
-
类型列表是在运行时定义的还是在编译时已知的?
-
不清楚你在问什么,但在处理类层次结构的实例时,你必须使用指针集合而不是值。
-
所有实现类型的列表在编译时是已知的。但是我需要使用哪些类实例取决于输入数据。因此,我想在添加新的继承类时将其自动化以节省时间。