У меня есть базовый класс B
и несколько производных шаблонных классов D<int>
, D<float>
, D<double>
и т. Д. (Более десяти)
В моей программе я нахожу ситуацию, когда у меня есть указатель B, который я ЗНАЮ, указывает на экземпляр одной из специализаций D. У меня также есть уникальный ключ, который идентифицирует производный тип.
Итак, я хочу вызвать правильный метод производного класса, используя мой указатель базового класса и ключ уникального типа. Я на самом деле хочу сделать это в нескольких местах, поэтому единственное решение, которое я нашел, не только некрасиво, но и громоздко.
Есть ли лучший способ получить доступ к членам производного класса, имеющим базовый указатель и уникальный ключ в C ++?
Я не хочу / не могу изменить базовый класс. буст библиотека это честная игра.
Вот мой потенциальный код, но я не доволен, повторяя это везде, где мне нужно получить доступ к производной функции / переменной-члену. Все это для одного вызова функции-члена? !!
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();
}