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