У нас есть метод, которому передается класс в качестве аргумента. Этот класс имеет разные дочерние классы. Нам нужно знать, какой из этих классов передается в качестве аргумента этому методу. Мы не можем определить один метод для каждого из возможных классов из-за требований присваивания. Кроме того, если дочерний класс не поддерживается этим методом, ошибка должна быть сгенерирована во время компиляции.
Мы пытались сделать это с помощью static_cast, но мы не получаем требуемых результатов, поскольку преобразование между двумя дочерними классами всегда возможно.
class A{
...
};
class B : public A{
...
};
class C : public A{
...
}
void foo(A a){
if(a is B){
//OK and do stuff
}else if(a is C){
//throw compile error
}
}