Ответ 1
Вы должны указать flagId
для записи. Для этого предназначена часть []
. Сейчас он ничего не фиксирует. Вы можете захватить (подробнее) по значению или по ссылке. Что-то вроде:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[&flagId](Flag& device)
{ return device.getId() == flagId; });
Что фиксируется по ссылке. Если вы хотите захватить значение const, вы можете сделать это:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[flagId](Flag& device)
{ return device.getId() == flagId; });
Или изменяемым значением:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[flagId](Flag& device) mutable
{ return device.getId() == flagId; });
К сожалению, нет простого способа захвата с помощью ссылки const. Я лично просто объявлял бы временный const ref и фиксировал это по ссылке:
const auto& tmp = flagId;
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[&tmp](Flag& device)
{ return device.getId() == tmp; }); //tmp is immutable