Возможный дубликат:
С++ эквивалент instanceof
Мне было интересно, какая разница между dynamic_cast и typeid относится только к сопоставлению классов (кроме dynamic_cast), позволяющих получить доступ к подклассу методы и typeid только полезны для сравнения классов). Я нашел двухлетний StackOverflow, задающий тот же вопрос: эквивалент С++ экземпляра. Тем не менее, мне уже два года, и я не хотел, чтобы в некрополе был старый пост (и я не уверен, когда вышел typeid), поэтому я подумал, что задаю тот же вопрос с небольшой разницей.
В принципе, у меня есть класс A и класс B, которые являются подклассами абстрактного класса C. Класс C берется как параметр для метода, и я хочу определить, действительно ли класс C является классом A или классом B. И typeid, и dynamic_cast работают правильно, поэтому это скорее вопрос лучшей практики/производительности. Я предполагаю:
A* test = dynamic_cast<A*> someClassCVar
if (test != 0) { //it is of class A }
ИЛИ
if (typeid(someClassCVar) == typeid(A)) {
//it is of class A
}
EDIT: Извините, я забыл включить этот бит информации. Документация ActiveMQ CMS предусматривает использование dynamic_cast, но я думаю, что это только потому, что предполагает, что пользователь захочет получить доступ к методам, специфичным для подкласса. Для меня кажется, что typeid будет лучшей производительностью, если требуется только сравнение классов: http://activemq.apache.org/cms/cms-api-overview.html