我觉得Polarislee(北极星)(无房无车,飘在北京)说的有道理,无论你使用任何方法"骗"过了编译器,就你现在的代码而言,本身是否设计缺陷的,或者说你这样的转化是没有实际意义的.
我这里简单设想一个downcasting发生合理的情况:
1.加入你设计了一个比较深的类的继承结构,例如:
class Base;
class Derived1: public Base;
class Derived2: public Base:
class MyDerived1: Derived1;
class MyDerived2: Derived2;
2.创建多个派生类对象,但是都是通过基类指针保存他们的地址,例如:
Base* pBase1 = new Derived1;
Base* pBase2 = new MyDerived2;
3.这时候你需要将这些基类指针转化它他们正确的派生类对象指针,这时候你就需要"安全"的downcasting,你可以通过dynamic_cast<>来完成:
Derived1* pD = dynamic_cast<Derived1*>(pBase1); //ok
Derived1* pD2 = dynamic_cast<MyDerived2*>(pBase1); //error