I have a class structure with loads of different child classes all inheriting from the same abstract base class. This base class is there because all these classes self register at compile time to a factory from which they are built. This is really neat and keeps me from the burden of maintaining a huge switch or any other flow mechanism somewhere down stream.
+---------------+
| Base |
+--+---------+--+
| |
+-------+-+ +-+-------+
| Kid1 | | Kid2 |
+----+----+ +----+----+
| |
+---+---+---+ +---+---+---+
| | | | ... | | | | ....
However, these Kid1
and Kid2
classes are different and the issue is that I have to distinguish between them somewhere in my code and the only thing I have is a Base
pointer. I did not want to bother the factory with this and keep that as simple as possible.
The way I solved this right now is by having Base
being somewhat aware of the two siblings. It has a virtual method type()
which returns an enum type distinguishing between Kid1
and Kid2
. Both kids override this (basically saying I am KidX) such that I know with whom I am dealing. This type is then used to dynamic_cast
Base
to either of the kids and the program proceeds.
However, is this the right approach?
I could for example add some more virtual
methods to base, on the one hand polluting it with methods only one part of the hierarchy uses but on the other hand saving me the dynamic_cast
.
Any thoughts?