私は この例 に従ってラムダを使用しようとしていますremove_if
。私の試みは次のとおりです。
int flagId = _ChildToRemove->getId();
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[](Flag& device) {
return device.getId() == flagId;
});
m_FinalFlagsVec.erase(new_end, m_FinalFlagsVec.end());
しかし、これはコンパイルに失敗します:
error C3493: 'flagId' cannot be implicitly captured because no default capture mode has been specified
ラムダ式に外部パラメータflagId
を含めるにはどうすればよいですか?
キャプチャする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を宣言し、それを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