向下投射到模板类

Downcast to template class

本文关键字:      更新时间:2023-10-16

我有模板类,我想有这种类类型的向量。我看到了解决方案,您需要用另一个没有模板的类包装该类,然后拥有这个新类的向量。现在我想向下投射例如列表对象之一 - 但不允许投射。我该怎么办?

例:

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)
}

objects[0]是指向对象的指针。您的强制转换(顺便说一下,永远不要使用 C 样式转换(尝试将shared_ptr<Wrapper>对象转换为Father<int>对象。当然,这是不可能的,因为这两种类型是完全不相关的。

取消引用指针并将其向下转换为引用(如果需要多态性(:

auto& object = static_cast<Father<int>&>(*objects[0]);

您无需包装模板类即可创建具有其类型的向量。

这将正常工作

std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);
相关文章:
  • 没有找到相关文章