Могут ли лямбда-выражения захватывать CV-квалифицированные переменные? - PullRequest
1 голос
/ 10 марта 2012

В следующем фрагменте _filewatcher - это ссылка на lvalue, соответствующая константам. Я хотел бы сравнить его с каждым членом m_files, используя их getPath() функцию-член. К сожалению, эта функция-член может быть вызвана только для const объектов. Это привело меня к написанию этого кода:

ErrorCode DirectoryWatcherWindows::addMonitoredFile(const FileWatcherWindows& _fileWatcher)
{
    ErrorCode ret = Success;

    auto iter = std::find_if(m_files.begin(), m_files.end(),            
        [&](FileWatcherWindows* fileWatcher)
        {   
            return _fileWatcher.getPath() == fileWatcher->getPath();
        }
    );

    if (iter == m_files.end())
        m_files.push_back(&_fileWatcher);
    else
        ret = AlreadyExists;

    return ret;
}

Это не компилируется в MSVC10, так как _fileWatcher внутри лямбда-выражения не является константным. Я попытался изменить поле захвата на [const&], но это тоже не сработало.

Есть ли способ иметь CV-квалифицированные ссылки в перехватах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...