C++0x, лямбда в лямбде. Доступа ко внешней переменной.
От: shestero  
Дата: 01.07.11 09:40
Оценка:
                    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", но компилирует.
Бажек?
Или что не так?
Re: C++0x, лямбда в лямбде. Доступа ко внешней переменной.
От: Alexey F  
Дата: 02.07.11 12:17
Оценка:
Здравствуйте, 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 в первой лямбде и передать её во вторую.
Re: C++0x, лямбда в лямбде. Доступа ко внешней переменной.
От: _nn_ www.nemerleweb.com
Дата: 03.07.11 07:16
Оценка:
Здравствуйте, shestero, Вы писали:

<skip/>

А зачем насиловать себя и компилятор ?
Возьмите Boost.Foreach.

Код будет проще, понятней и быстрей
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.