приведение класса const с использованием dynamic_cast

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

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 (base); для поддержки const, но это не работает.

9
задан Eclipse 31 August 2010 в 02:38
поделиться

2 ответа

Попробуйте это:

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

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

19
ответ дан 4 December 2019 в 10:02
поделиться
const Der* der1 = dynamic_cast<const Der*>(base); 

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

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

2
ответ дан 4 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: