Каков наилучший способ проверить тип указателя базового класса? - PullRequest
1 голос
/ 19 января 2009

Я хочу знать тип времени выполнения указателя базового класса, я знаю, что вы можете использовать dynamic_cast. есть ли лучший способ?

Ответы [ 2 ]

7 голосов
/ 19 января 2009

dynamic_cast только подтвердит ваше предположение, и даже это не идеально. Если C наследует от B, который наследует от A, dynamic_cast<B*>((A*)&theC) будет работать. typeid даст вам фактический тип, но в некотором смысле это не совсем полезно для чего-либо. Например, вы не можете создавать новые объекты того же типа.

Итак, остаётся вопрос о том, какова ваша настоящая цель. При правильном проектировании ОО вам никогда не нужно знать о неограниченном наборе типов, которые могут быть получены из базового типа.

3 голосов
/ 19 января 2009

Оператор typeid делает это. Он возвращает вам постоянную ссылку на объект type_info в постоянное время.

Также посмотрите на Производительность typeid vs dynamic_cast <> , перевернутую на devx.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...