【发布时间】:2012-08-28 08:14:48
【问题描述】:
我有一个基础结构FooBase:
struct FooBase { };
然后我创建了一个模板结构Foo,它是FooBase 的子结构:
template <typename typeName> struct Foo : public FooBase { typeName* foo };
在某个类中,我创建了一个FooBase 的向量并在其中添加了Foo 的实例:
vector <FooBase> FooVector
...
Foo <Bar> fooInstance;
fooInstance.foo = new Bar();
FooVector.push_back ( fooInstance );
然后我需要访问存储的数据,但我收到了关于 FooBase 中成员 foo 缺席的可预测且明显的错误
FooVector[0].foo
我不会写类似的东西
Foo <Bar> fooInstance = FooVector[0]
因为我不知道模板参数。
如何将Foo 的实例存储在向量中,以便以后访问它们。 请注意,我不知道最后一步的模板参数 - 从向量中读取数据时。
附注不允许提升!
【问题讨论】:
-
你可以通过
typename引用Bar吗?你需要对Bar做任何特定于它的类型的事情吗(我的猜测是没有)。 -
您正在寻找的是一种称为类型擦除的技术。
标签: c++ class templates struct storage