C++ 如何播放共享\u ptr<;富<;派生>&燃气轮机;至共享\u ptr<;富<;基地>>;?
我需要将C++ 如何播放共享\u ptr<;富<;派生>&燃气轮机;至共享\u ptr<;富<;基地>>;?,c++,boost,c++11,C++,Boost,C++11,我需要将shared_ptr转换为shared_ptr,但不知道如何转换。基本上我想做: shared_ptr<Foo<Base>> p (new Foo<Derived>()); shared_ptr p(新的Foo()); 但编译器给出了错误: /usr/include/c++/4.8/bits/shared_ptr_base.h: In instantiation of 'std::__shared_ptr<_Tp, _Lp>::__sh
shared_ptr
转换为shared_ptr
,但不知道如何转换。基本上我想做:
shared_ptr<Foo<Base>> p (new Foo<Derived>());
shared_ptr p(新的Foo());
但编译器给出了错误:
/usr/include/c++/4.8/bits/shared_ptr_base.h: In instantiation of 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(_Tp1*) [with _Tp1 = Foo<Derived> _Tp = Foo<Base> __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]':
/usr/include/c++/4.8/bits/shared_ptr.h:113:32: required from 'std::shared_ptr<_Tp>::shared_ptr(_Tp1*) [with _Tp1 = Foo<Derived> _Tp = Foo<Base>]'
main.cpp:17:48: required from here
/usr/include/c++/4.8/bits/shared_ptr_base.h:768:39: error: cannot convert 'Foo<Derived>*' to 'Foo<Base>*' in initialization
: _M_ptr(__p), _M_refcount(__p)
/usr/include/c++/4.8/bits/shared_ptr_base.h:std::_shared_ptr::_shared_ptr(_Tp1*)[with Tp1=Foo Tp=Foo u gnu cxx:_Lock_policy Lp=(u gnu cxx::u Lock_policy)2u]:
/usr/include/c++/4.8/bits/shared_ptr.h:113:32:必须来自“std::shared_ptr::shared_ptr(_Tp1*)[with _Tp1=Foo _Tp=Foo]”
main.cpp:17:48:从这里开始需要
/usr/include/c++/4.8/bits/shared_ptr_base.h:768:39:错误:无法在初始化时将“Foo*”转换为“Foo*”
:_M_ptr(_p),_M_refcount(_p)
< P>一个具有不同参数的类模板被C++类型的系统视为完全不同的类型。
Foo<Base>
Foo
不是与a相同的类型
Foo<Derived>
Foo
<>(P>),两者之间没有多态性关系。 < P>一个具有不同参数的类模板被C++类型的系统视为完全不同的类型。p>
Foo<Base>
Foo
不是与a相同的类型
Foo<Derived>
Foo
它们之间没有多态关系。一般来说,这是不可能的,因为
Foo
和Foo
是不相关的类型。如果你想要更好的建议,你必须解释一下Foo
实际上应该做什么。因为Foo
并不是从Foo
@BrianBi派生出来的相关问题:虽然没有人回答,所以我用上面简单的方式来解释。一般来说,这不能做到,因为Foo
和Foo
是不相关的类型。如果你想要更好的建议,你必须解释什么是<代码> Foo实际上是应该做的。因为<代码> Foo不是从<代码> Foo中得到的。@ BrangBi RelaFunt问题:虽然没有人回答它,所以我把它放在一个更简单的方式上面。虽然我不能在C++标准中找到合适的引用,但这将是很难的,为什么会提到不相关的事情?它描述的是相关的事物,而不是所有不相关的事物@《标准》涵盖的每一个主题中的雅克都介绍了许多合法事物以及绝对非法的事物的例子。举例来说,在模板下涵盖这个主题是明智的,因为我们中的许多人一开始可能认为这样的转换是可能的。根据Foo
的实际功能,定义专门化template结构Foo:Foo…
。然而,上一次我这么做时,像那样玩弄整个类层次结构是一件非常头痛的事情(不写下它们就不可能跟踪关系),因此我决定在将来避免它。因此,有一种方法可以解决OP的问题:专门化共享\u ptr
。在1的范围内,它是过分的。虽然我不能在C++标准中找到合适的引用,但这很难,为什么它会提到那些不相关的东西呢?它描述的是相关的事物,而不是所有不相关的事物@《标准》涵盖的每一个主题中的雅克都介绍了许多合法事物以及绝对非法的事物的例子。举例来说,在模板下涵盖这个主题是明智的,因为我们中的许多人一开始可能认为这样的转换是可能的。根据Foo
的实际功能,定义专门化template结构Foo:Foo…
。然而,上一次我这么做时,像那样玩弄整个类层次结构是一件非常头痛的事情(不写下它们就不可能跟踪关系),因此我决定在将来避免它。因此,有一种方法可以解决OP的问题:专门化共享\u ptr
。从1到过度杀戮的尺度来看,这是过度杀戮。