【发布时间】:2014-06-25 19:51:57
【问题描述】:
我有一个模板类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 *>。很抱歉造成混乱。
【问题讨论】:
-
将指针 f 转换为 Field
*? -
您是否打算每个
AbstractField都应该实现一些getValue()? -
@Matt 我已经注意到我的问题不够清楚,因为我不能简单地转换为
Field<double> *,因为我实际上将f传递给另一个需要AbstractField *的函数,其中我无法确定f的基础类型,因此无法转换。 -
@DrewDormann 不,我无意让 AbstractField 类实际实现
getValue()。AbstractField旨在成为各种Field<T>的抽象基类,这样我就可以用Field<int>s、Field<double>s 等创建一个向量std::vector<AbstractField *>。 -
其实我是想写
Field<int> *s、Field<double> *s等等。
标签: c++