Можно ли как-то в c++ узнать принадлежность объекта классу?

У меня есть (пока нет но, прежде чем начать нужно определится с такими вещами) массив объектов игры. Это разные классы, которые наследуют от одного (Object, например). То есть все они являются Object.

Но как мне понимать, что элемент этого массива является не только Object в общем, но и, например, игроком или врагом или стеной или еще чем-то?

В js я бы написал:
if (objects[i] instanceof Wall) { ... }

Но как такое сделать с С++? При этом без костылей.
Или может быть я не правильно понимаю как такие вещи делаются в С++? Если да, но как это организовывают?
  • Вопрос задан
  • 3499 просмотров
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Зачем вам это? Есть полиморфизм, а касты -- это плохой стиль почти всегда.

Можно много чего использовать, в том числе и тэги. В базовом классе создаёте перечисление, где каждый элемент -- тип наследника + 1 элемент на тип базового класса. В базовом классе определяете виртуальный метод вроде type() и реализуете его для всех наследников.

Но перед тем, как сделать это, хорошо подумайте над тем, надо ли оно вам. Про SOLID почитайте, в особенности про букву L.
Ответ написан
Комментировать
GavriKos
@GavriKos
Почитайте например вот это:
https://stackoverflow.com/questions/1986418/typeid...
особенно ответ.
Где то видел еще реализацию через темплейты.
Но 90% что чт то не так с архитектурой раз такое надо. И если уж надо и наследуетесь от базового класса - то сделайте в базовом классе метод, который вернет тип по enum.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы