我正在研究应用于抽象基因组类型的遗传算法的实现。基于模板的成员初始化,其中模板是抽象类的衍生
我的设置是这样的:
class AbstractGenome
{
virtual void init() = 0;
virtual void mutate() = 0;
.
.
.
};
class GeneticAlgorithm
{
std::vector<AbstractGenome*> genomes;
void init(int numGenomes)
{
for (int i=0; i < numGenomes; ++i)
{
AbstractGenome *genome = new DerivedGenome(); <=This is where my problem is
genome->init();
genomes.push_back(genome);
}
}
}
其中DerivedGenome是稍后定义(在某个时候):
class DerivedGenome: public AbstractGenome
{
void init() { do stuff; }
void mutate() {do stuff; }
}
我的问题是我唯一知道的DerivedGenome它是从AbstractGenome派生的 - 因此我无法对DerivedGenome构造函数进行全面调用。
解决此问题的一种方法是从GeneticAlgorithm中派生出来,并覆盖所有基因组类型的init函数,但我想知道是否有方法以更好的方式解决此问题,例如通过模板?
非常感谢。
......究竟是什么*是问题? – molbdnilo
好点。看我的编辑。 –