我有一个基类Feature
feature.h中
#ifndef FEATURE_H
#define FEATURE_H
#include <string>
#include <map>
using namespace std;
template <class T> class Feature
{
public:
virtual map<string, double> calculate(T input)
{
map<string, double> empty;
return empty;
}
};
#endif FEATURE_H
儿童班AvgSentenceLength
avgSentenceLength.h
#include "text.h"
#include "feature.h"
class AvgSentenceLength : public Feature<Text>
{
public:
map<string, double> calculate(Text text);
};
我尝试使用calculate
对象从另一个文件调用AvgSentenceLength
方法,而不是直接但仍然:
map<int, Feature<Text>> features;
AvgSentenceLength avgSentenceLength;
features.insert(pair<int, Feature<Text>>(1, avgSentenceLength));
map<string, double> featuresValues;
featuresValues = features.at(1).calculate(text);
我想调用子类的calculate
方法,但它调用基类的calculate
方法。我不能在基类中使用纯虚函数,因为必须创建此类的对象。
答案 0 :(得分:4)
您需要将map<int, Feature<Text>>
更改为map<int, Feature<Text>*>
。要通过其基础调用多态函数,您需要一个间接级别,如指针或引用。
答案 1 :(得分:1)
只需在此行添加指针*
:map<int, Feature<Text>> features
这样就像这样:map<int, Feature<Text>*> features
。