я возможно не так задал вопрос. хотелось бы узнать, почему компилятор не может все проверить на этапе компиляции. зачем еще добавлять динамическую проверку?
class Object {
public:
virtual ~Object() {}
};
class Weapon : public Object {
public:
virtual ~Weapon() {}
};
class Player : public Object {
public:
virtual ~Player() {}
};
void handleObject(Object* object) {
// What is object? Is it weapon or player?
};
// ....
Object* object = rand() % 100 > 50 ? new Weapon() : new Player();
handleObject(object);