Похоже, что QList
предназначен для использования без указателей. Они определяют много интерфейса, который является константой, как const T&
, который отлично подойдет, если ваш QList
был на Child
, а не Child*
.
Он будет работать на указателях в порядке, но он не может объявить им постоянство. Я не рекомендую менять QList на Child, если это не так просто, чтобы скопировать, у вас есть все правильные семантики для копирования ctor, dtor, op =, op == и т. Д., И вы не против иметь копии в списке, а не объекты, в которые вы проходите. Вы можете увидеть, как с помощью int
или строк, что он будет работать как ожидалось (removeAll будет const правильным).
Если для вас важна корректность const, используйте const_cast. Затем объявить константный реф и передать в.
void Parent::removeChild(const Child *child)
{
QList<Child*>::const_reference constRefToChild = const_cast<Child *> child;
children.removeAll(constRefToChild);
}
Смысл этого в том, что если RemoveAll когда-либо изменен не принимать константный, вы получите ошибку компилятора. Тогда вы знаете, что removeAll не сохраняет константу аргумента.
Когда вы говорите «const pointer», вы имеете в виду 'const Child *' или 'Child * const'? Когда вы говорите, что «const ссылается на неконстантный указатель», вы имеете в виду «Child * const &» или что-то еще?Существует внутренняя неоднозначность, потому что «const pointer» строго означает «T * const», но в случайном использовании может означать «const T *». –
Извините за путаницу. Я имею в виду «указатель на const Child» для аргумента, в то время как 'removeAll()' будет принимать «константную ссылку на указатель на неконстантный ребенок». Я всегда забываю, какой синтаксис есть. Поэтому я говорю не о самом значении указателя, а о том, на что указывает ребенок. –
Я не понимаю. Что такое QList, что он делает и откуда он? –