向下投射到模板类
Downcast to template class
我有模板类,我想有这种类类型的向量。我看到了解决方案,您需要用另一个没有模板的类包装该类,然后拥有这个新类的向量。现在我想向下投射例如列表对象之一 - 但不允许投射。我该怎么办?
例:
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);
相关文章:
- 没有找到相关文章