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>*'
如果父项是模板化的,即使模板中指定的类型相同,也不可能在继承的类型之间转换指针类型?
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)