приведение класса Const с использованием dynamic_cast - PullRequest
9 голосов
/ 31 августа 2010

Я хочу разыграть это:

class Base 
{
public:
    virtual ~Base(){};
};
class Der : public Base {};

int main()
{
    const Base* base = new Der;
    Der* der = dynamic_cast<Der*>(base); // Error

    return 0;
}

Что мне делать? Я пытался поставить: const Der* der = dynamic_cast<Der*>(base); для сохранения констант, но это не работает.

Ответы [ 2 ]

18 голосов
/ 31 августа 2010

Попробуйте:

const Der* der = dynamic_cast<const Der*>(base);

dynamic_cast не может удалить квалификатор const.Вы можете выбросить const отдельно, используя const_cast, но в большинстве случаев это плохая идея.В этом отношении, если вы ловите себя, используя dynamic_cast, это, как правило, признак того, что есть лучший способ сделать то, что вы пытаетесь сделать.Это не всегда неправильно, но считайте это предупреждающим знаком того, что вы делаете что-то нелегко.

2 голосов
/ 31 августа 2010
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base));

, пока оба вышеуказанных кастинга работают, второго следует избегать.

...