C++’s RTTI is expensive. Very expensive. Notoriously and verifiably expensive.
So how can we efficiently get information of the concrete subclass, given an abstract base class pointer, without the great expense of using RTTI?
Simple. Use an enum.
Consider the example in my stackoverflow post. What I did there is just keep a single bitfield (an int) that has concrete types bitwise OR’d in, in each derived constructor.
So, in the example posted, an object of Type BigCat would have 0111 for its typeTag field, indicating that it is an Animal, a Cat, and a BigCat. Concrete type checking is cheap as a bitwise AND.