I have a base class B and several derived template classes D<int>, D<float>, D<double>, etc. (so more than ten)
In my program, I find a situation where I have a B pointer that I KNOW points to an instance one of the D specializations. I also have a unique key that identifies the derived type.
So, I want to call the correct derived class method using my base class pointer and the unique type key. I actually want to do this in several places, so the one solution I have come up with is not only ugly, but cumbersome.
Is there a better way to access the derived class’s members having a base pointer and a unique key in C++?
I don’t want to / can’t modify the base class. boost library is fair game.
Here is my potential code, but I’m not happy with replicating this everywhere I need to access a derived member function/variable. All of this for one member function call?!!
B * bptr = ...
std::type_info * typekey = ...
if (typekey == &typeid(D<float>) ) {
D<float> * dptr = static_cast<D<float>*>(bptr);
dptr->derivedMember();
} else if (typekey == &typeid(D<double>) ) {
D<float> * dptr = static_cast<D<double>*>(bptr);
dptr->derivedMember();
} else if (typekey == &typeid(D<int>) ) {
D<float> * dptr = static_cast<D<int>*>(bptr);
dptr->derivedMember();
}
If all the
D<type>::methods have the same name ‘DerivedMember`, and I assume that the base class B does not declare this as virtual, can you change your hierachy from:to:
Then you could have: