【发布时间】:2016-01-26 08:35:14
【问题描述】:
我想创建一个模板项向量
我的做法是:
class InterfaceItem
{
}
template <typename T>
class Item : public InterfaceItem
{
T value;
T GetValue();
}
std::vector<InterfaceItem*> items;
items.push_back(new Item<int>());
这种方法到目前为止有效,但现在我遇到了访问我的项目价值的问题。最好的方法是什么?
我曾考虑将子类的类型保存在基类中,然后强制转换为该子类,但我只能使用默认类型或已知类型。
你的方法是什么
auto value = items[0].GetValue(); // will not compile
【问题讨论】:
-
你似乎完全误解了继承的目的。顾名思义,您的
InterfaceItem应该提供一个接口。 -
在访问派生类型的成员之前,您需要将
InterfaceItem*转换为其派生类型。 -
@HappyCoder 他不应该这样做并改正他的设计。
-
是的,这是正确的方法。我只是在说明访问派生类型成员的正确方法。
-
我想在同一个向量中存储多种类型的项目,否则没问题