gpt4 book ai didi

c++ - 将子类转换为模板化父类时的 C2664

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:00 25 4
gpt4 key购买 nike

我有一个模板化的父类和一个实现它的子类。

template< typename T1, typename T2><br/>
class ParentClass{ . . . };

class ChildClass : public ParentClass<MyT1, MyT2> { . . . };

我想要一个可以多态使用的指针:

ParentClass<T1, T2>* ptr;<br/>
ptr = static_cast<ParentClass<MyT1, MyT2>* >(new ChildClass() );

无论我如何转换,我总是得到一个具有相同表达式的 C2664:

错误 C2664:无法将参数 1 从“ParentClass< T1,T2> *”转换为“ParentClass< T1,T2> *”

如果父类是模板化的,即使模板中指定的类型相同,也不能在继承类型之间转换指针类型吗?

最佳答案

C2664 提示的是赋值,而不是强制转换(如果强制转换无效,您会收到错误 C2440,“‘static_cast’:无法从...转换”)。

问题是下面的不一样:

ParentClass<T1, T2>*
ParentClass<MyT1, MyT2>*

具有不同参数的模板实例化是不同的、不相关的类型。

这应该可以正常工作:

ParentClass<MyT1, MyT2>* ptr;
ptr = static_cast<ParentClass<MyT1, MyT2>* >(new ChildClass() );

尽管在这种情况下完全没有必要强制转换,因为派生指针到基址指针的转换是隐式的,所以您只需要以下内容:

ptr = new ChildClass();

关于c++ - 将子类转换为模板化父类时的 C2664,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com