我有一个模板类Field<T>
,它继承自非模板抽象基类AbstractField
,以便能够在Field<T> *
中存储所有不同类型的std::vector<AbstractField *>
类型。我的设置如下:
#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
类中使用虚拟模板成员函数。我希望尽可能不使用boost。欢迎任何提示!
修改
已将std::vector<Field<T> >
更正为std::vector<AbstractField *>
。对不起,感到困惑。
答案 0 :(得分:2)
也许这个:
template <typename> struct Field;
struct AbstractField
{
virtual ~AbstractField() {}
template <typename T> T getValue()
{
return dynamic_cast<Field<T>&>(*this)->get();
}
};
template <typename T> struct Field : AbstractField
{
T & get();
// ...
};