Мне нужно найти тип объекта, на который указывает указатель. Код приведен ниже.
//pWindow is pointer to either base Window object or derived Window objects like //Window_Derived.
const char* windowName = typeid(*pWindow).name();
if(strcmp(windowName, typeid(Window).name()) == 0)
{
// ...
}
else if(strcmp(windowName, typeid(Window_Derived).name()) == 0)
{
// ...
}
Поскольку я не могу использовать оператор switch для сравнения строк, я вынужден использовать цепочку if else. Но поскольку количество типов окон, которые у меня есть, велико, эта цепочка if else становится слишком длинной. Можем ли мы проверить тип окна с помощью переключателя или более простого метода?
РЕДАКТИРОВАТЬ: я работаю в модуле регистратора. Я думал, что регистратор не должен вызывать виртуальную функцию производного класса для ведения журнала. Это должно сделать самостоятельно. Поэтому я отказался от подхода виртуальной функции.
else if
, основанные на типе, никогда не бывают правильными. - person Omnifarious   schedule 19.08.2010