Мне любопытно, какие конструкции или языковые возможности, доступные как в текущем C ++, так и в C ++ 11, могут использоваться для определения типа объекта.Пример:
class Base {
};
class DerivA
: public Base {
};
class DerivB
: public Base {
};
void foo(Base* obj) {
// Identify if `obj` is a `DerivA` or a `DerivB`
}
Это упрощение.Казалось бы, вместо того, чтобы иметь способ идентифицировать тип, лучшее решение состоит в том, чтобы перегрузить функцию для двух производных типов и покончить с базовым классом.
Мой реальный вариант использования - один, гдеодин класс не интересуется точным типом объекта (т.е. просто нуждается в реализации Base
), а другой класс должен точно знать, какую реализацию Base
использует первый класс.
Этопроисходит в системе игровых объектов на основе компонентов.База будет EntityState
, а ее производные типы будут StandingState
, DeadState
и т. Д. Класс Entity
- это тот, который нуждается только в общем объекте EntityState
, а класс EntityRepresentation
должен точно знать, в каком состояниисущность должна решить, рисовать ли «стоячую» анимацию или «мертвую» анимацию, или что-то еще.
Редактировать: Конечно, если это возможно, я бынравится реализовывать игру таким образом, что даже представлению сущности не нужно знать тип состояния сущности.Если есть способ сделать это, то я бы использовал его.:) Я посмотрю в шаблон посетителя.