我有一个模板化的父类,以及一个实现它的子类。
template< typename T1, typename T2>
class ParentClass{ . . . };
class ChildClass : public ParentClass<MyT1, MyT2> { . . . };
我想要一个可以多态使用的指针:
ParentClass<T1, T2>* ptr;
ptr = static_cast<ParentClass<MyT1, MyT2>* >(new ChildClass() );

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

错误C2664:无法将参数1从'ParentClass *'转换为'ParentClass *'

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

最佳答案

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/

10-11 23:51