devxlogo

A Simple Way to Make Your Object RTTI & dynamic_cast Compliant

A Simple Way to Make Your Object RTTI & dynamic_cast Compliant

Consider this code:

 class CA{//...};class CB{//...};CA * CB2CA(CB *pb){        return dynamic_cast(pb);}

The CA and CB are totally unrelated classes and the CB2CA function seems to be completely useless. However, what if pb points to some kind of class that can be converted to CA?

If you try to compile this code, VC++ will fail, giving the message:

 error C2683: dynamic_cast : 'CB' is not a polymorphic type

If you add a virtual destructor, you’ll get a polymorphic type (the type that has at least one virtual function):

 class CB{public:   virtual ~CB() {};//...};

Now this code will be compiled with no errors.

PS: Of course, if the CB class already has a virtual function[s] there’s no need to add this fake one.

PPS: Don’t forget to enable RTTI support for testing this example.

See also  How IoT Tech Will Transform Logistics
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist