Вы бы использовать dynamic_cast
:
if (truck* truck_p = dynamic_cast<truck*>(car_p)) {
// car_p points at a truck
}
dynamic_cast
будет проверять динамический тип объекта, на который указывает car_p
и разрешить только бросок, если это truck
. Если это не truck
, это даст значение нулевого указателя, и поэтому условие if
не будет выполнено.
Однако необходимость протестировать динамический тип, подобный этому, указывает на плохой дизайн кода. Весь смысл полиморфизма заключается в том, что вы можете обрабатывать любые производные объекты, как если бы это был базовый объект, - не должно быть необходимости точно проверять, какой производный тип он был. Если вам нужно проверить динамический тип Car
, так что вы можете сделать на нем определенную операцию truck
, тогда вы не должны бросать этот truck
в контейнер Car*
.
Использовать ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector)? –
Просто переработайте приложение, чтобы вам не нужно было знать настоящий тип. –
Зачем вам нужен тип объекта? – Johnsyweb