我有一个模板类Field<T>
,它继承自非模板抽象基类AbstractField
,以便能够在std::vector<AbstractField *>
中存储所有不同种类的Field<T> *
类型。我的设置如下:如何规避虚拟模板成员函数?
#include <vector>
class AbstractField
{
public:
virtual ~AbstractField() {};
// Something similar to: template<class T> T getValue() const; ?
};
template<class T>
class Field : public AbstractField
{
private:
T d_;
public:
Field(T d) : d_(d) {}
T getValue() const { return d_; }
};
int main()
{
AbstractField *f = new Field<double>(0.1);
// How to call: f->getValue(); ?
return 0;
}
我想知道什么是叫f->getValue()
,因为我不能在AbstractField
类使用虚拟模板成员函数的最自然的方式。尽可能地,我宁愿不使用提升。欢迎任何提示!
编辑:
更正std::vector<Field<T> >
到std::vector<AbstractField *>
。对困惑感到抱歉。
转换指针F到现场 *? –
Matt
你的意图是**每个**'AbstractField'应该实现一些'getValue()'? –
@Matt我已经注意到我的问题不够清楚,我不能简单地将其转换为'Field *',因为我实际上将'f'传递给了另一个需要'AbstractField *'的函数,我不能确定'f'的基础类型,因此不能投射。 –
Marcel