У меня есть некоторый код, который выглядит следующим образом:Я хочу поместить указатель на объект, который является константой в контейнер, который содержит неконстантные указатели. Какие у меня варианты?
void addPtrs(vector<Thing*> & ThingPtrs, const vector<Thing> & actualThings) {
for (const Thing & t : actualThings)
if (/*some condition*/)
ThingPtrs.push_back(&t);
}
В принципе, я хочу изменить ThingPtrs
, давая это указатели на Thing
с, которые имеют какое-либо условие. Однако, поскольку я не хочу изменять фактический Thing
, я помечен как actualThings
как const
, и теперь я не могу назначить указатель const
указателю не const
.
Очевидно, что одним из решений является просто не делать actualThings
const
, но я на самом деле не намерен его изменять. Другое решение использует const_cast
, но я хотел бы избежать этого, если это возможно.
Каковы мои варианты в такой ситуации?
Если вы не намерены изменять любой 'Thing', ваш' ThingPtrs' будет определяемый как 'std :: vector &'. Увидев, что в нем хранятся указатели, отличные от 'const', это означает, что в какой-то момент требуется некоторая модификация _will_, поэтому вам не нужна никакая 'const'ness. –
Я намерен изменить 'Thing', но только через' actualThings' isntead 'ThingPtrs'. Могу ли я определить 'ThingPtrs' типа' vector '? –
Dillydill123
@ Dillydill123 Да, если вы измените 'ThingPtrs' на' vector ', тогда ваша функция должна скомпилироваться. –