Редактировать - Поместите вопрос в контекст немного больше.литые Производные * const на базу * const
Дано:
struct Base
{
...
};
struct Derived : public Base
{
...
};
class Alice
{
Alice(Base *const _a);
...
};
class Bob : public Alice
{
Bob(Derived *const _a);
...
};
Когда я пытаюсь реализовать
Bob::Bob(Derived *const _d) : Alice(static_cast<Base*const>(_d)) { }
он не работает. const_cast
не имеет смысла для меня, поскольку я не хочу, чтобы изменить константность, и я не изменить то, что я указываю на, так почему же тогда г ++ сказать мне
invalid static_cast from type ‘Derived* const’ to type ‘Base* const’
? Если я откажусь от литья, в нем будет указано:
no matching function for call to ‘Alice::Alice(Derived* const)’
Если бы кто-нибудь мог пролить свет на это, было бы очень благодарно.
Если 'Derived' на самом деле имеет' Base' в качестве базового класса, то (a) этот код не должен вызывать никаких ошибок (это может вызвать предупреждение о том, что определитель const в target_ static_cast не делает ничего) и (b) вы можете просто назначить '_derived_ptr'' _base_ptr', как предлагает Оли. –
Я думаю, что у вас есть константа с другой стороны: 'Base * const x;' Здесь x является указателем const на 'standard Base' (т. Е. Вы не можете изменить x). 'Base const * x' Здесь x является указателем на' const Base' (т. Е. Objext, на который указывает x, является const). –
У меня на самом деле есть указатели как const, а не объекты, на которые указывает. Кроме того, этот вопрос не является полностью _точным (просто чтобы я не наполнил вопрос кодом), потому что я использую статический приведение в конструкторе, вызывающий его родительский конструктор: 'SomeClass :: SomeClass (Derived * const _d): SomeBase (static_cast (_d)) {} ' –
parallel