C++ 具有多态模板参数的多态模板化类

C++ 具有多态模板参数的多态模板化类,c++,templates,inheritance,polymorphism,idioms,C++,Templates,Inheritance,Polymorphism,Idioms,在一个简单的设计中,类B以多态方式继承类a。 模板类Base有一个T*成员,用于进一步的操作。派生的以多态方式从基继承。 允许创建此类对象的语法是什么: Base<A>* a = new Derived<B>(); Base*a=新派生(); 作为进一步参考,我使用的代码如下所示(当然,转换不会成功): A类 { 公众: () { 首先,当我们谈到“简单化”部分时,请告诉我 剥离所有一半的模板,将注意力集中在您试图变形的部分上)。最终,您将拥有不同的类Base和Bas

在一个简单的设计中,类B以多态方式继承类a。 模板类
Base
有一个
T*
成员,用于进一步的操作。派生的
以多态方式从
基继承。
允许创建此类对象的语法是什么:

Base<A>* a = new Derived<B>();
Base*a=新派生();
作为进一步参考,我使用的代码如下所示(当然,转换不会成功):

A类
{
公众:
()
{

首先,当我们谈到“简单化”部分时,请告诉我

剥离所有一半的模板,将注意力集中在您试图变形的部分上)。最终,您将拥有不同的类
Base
Base
(后者是通过
派生的

这两个参数都不是从各自的模板参数继承的。因此关系(分层或其他)
A
B
是不相关的。
Base
Base
是不同的和不相关的,因此您试图编写的东西无法工作。事实上,即使确实分别从A
A
B
继承,您最好希望的是
A*
指针,而您不是在你的样品中没有使用


如果不是这样的话,我会很高兴地删除它,因为我真的很好奇。

一袋苹果
Base
不是一袋水果
Base
,因为你可以把一个桃子、一个樱桃和一个梨放在一袋水果里。

这对指针不起作用。
新派生的
结果不能分配给
Base*
,我事实上,它甚至不能分配给
派生*
,因为所有这些类型都是不相关的。您真的需要模板包装器之间的这种关系吗?这难道不足以保证
Base
Base
的值的可兑换性(就像标准智能指针那样)?您已经使用模板转换构造函数实现了此功能

//...
Base<B> tB(new B);
Base<A> tA = tB;
//...
/。。。
基础结核(新B);
碱基tA=tB;
//...

从数学上讲,这个方案应该是合理的:
A@teodron据我所知,它不可能与这里的构造有关。
Base
和Base最终是不相关的。它们各自都有一个成员变量,这是它们自己多态层次结构的一部分,这是不相关的。尽管如此,基本扩展仍然是unrel我希望这在我的描述中是有意义的。谢谢,我试着重新思考设计。是的,你想要达到的是类型之间的协方差关系。因为C++模板是不变量的,这是不起作用的。
//...
Base<B> tB(new B);
Base<A> tA = tB;
//...