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