向下转换为模板 class

Downcast to template class

我有模板 class,我想要这种 class 类型的向量。 我看到了解决方案,您需要用另一个没有模板的 class 包装 class,然后得到这个新 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]);

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

这会很好用

std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);