c++ - 如何用模板解决这个循环继承问题?

标签 c++ class oop templates

我有以下类(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从Base的定义来看

2. Derived<T>Base<T>根据 Derived<T> 的定义

所以Derived<Base<Root>>Base<Root>

有什么提示吗?

谢谢。

最佳答案

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=根?

没有。 A 源自 B,但是 Base<A>不源自Base<B> .

就像vector<X>一样不源自vector<Y> ,即使 X 继承 Y。

关于c++ - 如何用模板解决这个循环继承问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28596311/

相关文章:

c++ - 错误34;套接字编程结果太长

C++ 提示用户继续或离开

php - 如何创建多名称方法?

c++ - 如何从 QDialog 传递数据?

c++ - ‘[’ token 之前的预期不合格 ID

c++ - mfc 加速器 Ctrl + 不起作用

c++ - 当创建所述类型的对象时,静态 (PASS_OBJECT<int>) 模板化数组会丢失数据吗?

java - 类和属性 - Java

c++ - 通过构造函数初始化 std::array 私有(private)成员

c# - Reflection是否违反了封装原则?