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

DC.*_*DC. 2 c++ inheritance templates pointers casting

我有一个模板化的父类,以及一个实现它的子类.

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

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

And I want to have a pointer which I can use polymorphically:

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

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

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

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

Jam*_*lis 5

C2664抱怨分配,而不是演员(你会得到错误C2440,"'static_cast':无法转换......",如果演员表无效).

问题是以下内容不一样:

ParentClass<T1, T2>*
ParentClass<MyT1, MyT2>*
Run Code Online (Sandbox Code Playgroud)

具有不同参数的模板实例是不同的,不相关的类型.

这应该工作正常:

ParentClass<MyT1, MyT2>* ptr;
ptr = static_cast<ParentClass<MyT1, MyT2>* >(new ChildClass() );
Run Code Online (Sandbox Code Playgroud)

虽然在这种情况下完全没有必要进行转换,但由于指向派生到指针到基本转换的指针是隐式的,因此以下是您所需要的:

ptr = new ChildClass();
Run Code Online (Sandbox Code Playgroud)