std::for_each( // цикл 1
mapmapK2.begin(),
mapmapK2.end(),
[&](const std::pair<CString, std::map<CString, std::pair<float, float> > >& m) mutable
{
mapDatas[m.first].vecValues.resize( good_coreid.size() );
int K=0;
std::for_each( // цикл 2
good_coreid.begin(),
good_coreid.end(),
[&](const CString& CoreID) mutable
{
mapDatas[m.first].vecValues[K] = m.second.at(CoreID).second; // ! тут (mapDatas)
K++;
}
);
}
);
VS2010 подсвечивает как ошибку ("Error: invalid reference to an outer-scope local variable in lambda-body", но компилирует.
Бажек?
Или что не так?
Здравствуйте, shestero, Вы писали:
S>S>std::for_each( // цикл 1
S> mapmapK2.begin(),
S> mapmapK2.end(),
S> [&](const std::pair<CString, std::map<CString, std::pair<float, float> > >& m) mutable
S> {
S> mapDatas[m.first].vecValues.resize( good_coreid.size() );
S> int K=0;
S> std::for_each( // цикл 2
S> good_coreid.begin(),
S> good_coreid.end(),
S> [&](const CString& CoreID) mutable
S> {
S> mapDatas[m.first].vecValues[K] = m.second.at(CoreID).second; // ! тут (mapDatas)
S> K++;
S> }
S> );
S> }
S>);
S>
S>VS2010 подсвечивает как ошибку ("Error: invalid reference to an outer-scope local variable in lambda-body", но компилирует.
S>Бажек?
S>Или что не так?
Да, баг в MS VS2010.
См. здесь:
http://connect.microsoft.com/VisualStudio/feedback/details/560907/capturing-variables-in-nested-lambdas
Там же расписан workaround — сделать ссылку на mapDatas в первой лямбде и передать её во вторую.
Здравствуйте, shestero, Вы писали:
<skip/>
А зачем насиловать себя и компилятор ?
Возьмите
Boost.Foreach.
Код будет проще, понятней и быстрей