C++ 具有多态模板参数的多态模板化类
在一个简单的设计中,类B以多态方式继承类a。 模板类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
Base
有一个T*
成员,用于进一步的操作。派生的以多态方式从基继承。
允许创建此类对象的语法是什么:
Base<A>* a = new Derived<B>();
Base*a=新派生();
作为进一步参考,我使用的代码如下所示(当然,转换不会成功):
A类
{
公众:
()
{
首先,当我们谈到“简单化”部分时,请告诉我
剥离所有一半的模板,将注意力集中在您试图变形的部分上)。最终,您将拥有不同的类Base
和Base
(后者是通过派生的)
这两个参数都不是从各自的模板参数继承的。因此关系(分层或其他)A
到B
是不相关的。Base
和Base
是不同的和不相关的,因此您试图编写的东西无法工作。事实上,即使确实分别从AA
和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;
//...