Допустим, у нас есть библиотека, которую мы используем, и она предназначена для получения некоторых типов из:
class A {};
class B : public A {};
class C : public B {};
И когда мы выводим наши типы, у нас есть некоторые вещи, которые являются общими для всех наших случаев:
class CommonStuff {};
class D : public CommonStuff, public C {};
Теперь, когда мы работаем с нашей библиотекой, и существует обратный вызов, который принимает тип A & (или B & или C &)
void some_func(A& obj);
И предположим, что в этой функции она ожидает полиморфное поведение, но нам нужно получить доступ к некоторым из наших CommonStuff:
void some_func(A& obj)
{
CommonStuff& comn = dynamic_cast<CommonStuff&>(obj);
}
Поскольку прямой корреляции между A и CommonStuff нет, мы не можем использовать static_cast
, reinterpret_cast
, очевидно, не является правильным выбором, так как это приведет к нарезке. Единственный вариант здесь dyanmic_cast
.
Теперь возьмите это с крошкой соли, потому что это можно обойти.