Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向下转换到模板类_C++_Templates_Downcast - Fatal编程技术网

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