【发布时间】:2017-05-12 16:40:05
【问题描述】:
here 和 here 发布并回答了类似的问题,但建议的解决方案对我不起作用。
我有三个具有多级继承的类:
class Model
{
public:
Model();
template <typename InputModelType>
void importModel(const InputModelType &m);
virtual void process();
};
class SpecialModel : public Model
{
public:
SpecialModel();
template <typename InputModelType>
void importSpecialModel(const InputModelType &m);
virtual void process() override;
};
class SpecialSpecialModel : public SpecialModel
{
public:
SpecialModel();
template <typename InputModelType>
void importSpecialSpecialModel(const InputModelType &m);
virtual void process() override;
};
子模型是父模型的特例,可以以更简单的结构存储,因此可以更快地处理。
我想做的是实例化模型,具体取决于用户指定的输入参数model_type,如下所示:
Model* model;
switch(model_type){
case 1:
model = new SpecialModel;
model->importSpecialModel(gm);
break;
case 2:
model = new SpecialSpecialModel;
model->importSpecialSpecialModel(gm);
break;
default:
model = new Model;
model->importModel(gm);
break;
}
model->process();
使用上面的代码,我得到了以下错误:
“模型类”没有名为“importSpecialModel”的成员
“模型类”没有名为“importSpecialSpecialModel”的成员
问题在于,导入函数是模板化的,因此在基类中将它们定义为虚函数然后在子类中覆盖是无效的。
【问题讨论】:
标签: c++ class oop inheritance