Из связанной статьи видно, что вы имеете в виду typeid
и dynamic_cast<>
. Вы должны четко указать это в вопросе, так как вскоре вы увидите, что многие люди будут прыгать прямо, не просматривая ссылки.
Теперь, как и когда они используются? Самый простой ответ заключается в том, что обычно это не следует использовать. В большинстве случаев хорошо спроектированная программа не нуждается в проверке типов во время выполнения, и если вы обнаружите, что делаете это, то велика вероятность, что ваш проект в беде.
Конечно, есть исключения из всего, и в частности пример, который дал @Sga, действительно хороший. В boost::any
библиотека выполняет стирание типа, чтобы иметь возможность удерживать любой объект внутри типа, а затем использует RTTI вручную в any_cast
при извлечении значения, чтобы убедиться, что тип фактического объекта является правильным. Это тоже не является обычным явлением, большинство программ не используют стирание типа, и когда они это делают, им очень редко требуется анализировать тип во время выполнения.
person
David Rodríguez - dribeas
schedule
15.11.2011