C++ 向下转换到模板类
我有一个模板类,我想有这个类类型的向量。 我看到了一个解决方案,您需要用另一个没有模板的类包装这个类,然后得到这个新类的向量。 现在我想向下转换一个列表对象,但不允许这样做。 我该怎么办 例如:C++ 向下转换到模板类,c++,templates,downcast,C++,Templates,Downcast,我有一个模板类,我想有这个类类型的向量。 我看到了一个解决方案,您需要用另一个没有模板的类包装这个类,然后得到这个新类的向量。 现在我想向下转换一个列表对象,但不允许这样做。 我该怎么办 例如: class Wrapper { } template <typename T> class Father : public Wrapper { } int main() { std::vector<std::shared_ptr<Wrapper>> obj
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)
}
类包装器
{
}
模板
班长:公共包装
{
}
int main()
{
向量对象;
父对象=(父)对象。在(0);//错误(假设我知道它的整数)
}
对象[0]
是指向对象的指针。您的强制转换(顺便说一下,不要使用C样式强制转换)尝试将共享的\u ptr
对象转换为父对象。当然,这是不可能的,因为这两种类型完全不相关
取消对指针的引用并将其向下转换为引用(如果需要):
auto&object=static_cast(*objects[0]);
对象[0]
是指向对象的指针。您的强制转换(顺便说一下,不要使用C样式强制转换)尝试将共享的\u ptr
对象转换为父对象。当然,这是不可能的,因为这两种类型完全不相关
取消对指针的引用并将其向下转换为引用(如果需要):
auto&object=static_cast(*objects[0]);
无需包装模板类即可创建具有其类型的向量
这就行了
std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);
std::向量对象;
std::shared_ptr object=objects.at(0);
无需包装模板类即可创建具有其类型的向量
这就行了
std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);
std::向量对象;
std::shared_ptr object=objects.at(0);
谢谢回复:)我想要一些类型的向量,而不仅仅是int谢谢回复:)我想要一些类型的向量,而不仅仅是int