我有以下类(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/

10-16 03:38