向下转换为模板 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);
我有模板 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);