我有以下类(class):
template<class T>
class Base: public Root //this one abstract
{
std::vector<std::shared_ptr<T>> components;
}
template<class T>
class Derived : Base<T> //this one not abstract
{
//stuff
}
我正在建立:
Derived<Base<Root>> myDerived;
std::shared_ptr<Base<Root>> ptr_base;
ptr_base.reset(&myDerived); // -> ERROR
编译器给我:
error C2664: 'std::_Ptr_base<_Ty>::_Reset0' : cannot convert parameter 1 from 'model::Derived <T> *' to 'model::Base<T> *'
因此,编译器似乎并没有获得
Derived<Base<Root>>
也是Base<Root>
的原因,因为我试图这样做:1.从基础定义的
Base<Root> is Root
2.
Derived<T>
是Base<T>
的定义中的Derived<T>
所以
Derived<Base<Root>>
是Base<Root>
有什么提示吗?
ks
最佳答案
Derive<T>
是Based<T>
,因此Derived<Base<Root>>
是Base<Base<Root>>
。
现在的问题是:Base<Base<Root>>
是Base<Root>
吗?
换句话说:Base<Base<Root>>
是否源自Base<Root>
?
或等效地:Base<A>
是否从Base<B>
派生,其中A = Base<Root>
和B = Root?
否。A衍生自B,但Base<A>
并非衍生自Base<B>
。
即使X继承Y,也不会从vector<X>
派生vector<Y>
的方式相同。
关于c++ - 如何使用模板解决此循环继承问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28596311/