我有模板类,我想拥有此类类型的矢量。 我看到了一种解决方案,您需要将该类与另一个没有模板的类进行包装,然后再有一个新类的向量。 现在,我想向下转换例如列表对象之一-但不允许强制转换。 我该怎么办?
示例:
class Wrapper
{
}
template <typename T>
class Father : public Wrapper
{
}
int main()
{
std::vector<std::shared_ptr<Wrapper>> objects;
Father<int> object = (Father<int>)objects.at(0); // ERROR (lets say i know its integer)
}
答案 0 :(得分:3)
objects[0]
是对象的 指针 。您的类型转换(顺便说一句,不要使用C风格的类型转换)会尝试将shared_ptr<Wrapper>
对象转换为Father<int>
对象。当然,这是不可能的,因为这两种类型是完全不相关的。
取消引用指针并将其向下转换为引用(如果需要多态):
auto& object = static_cast<Father<int>&>(*objects[0]);
答案 1 :(得分:0)
您无需包装模板类即可创建具有其类型的向量。
这很好用
std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);