Допустим, у нас есть библиотека, которую мы используем, которая предназначена для наследования некоторых типов из:
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
.
Теперь отнеситесь к этому с недоверием, потому что это можно обойти.
person
Chad
schedule
01.07.2011
dynamic_cast
? Старые компиляторы реализовывали это чрезвычайно медленно, но в настоящее время большинство реализуют это как простое сравнение указателей vtbl. - person Billy ONeal   schedule 02.07.2011