В следующем фрагменте _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-квалифицированные ссылки в перехватах?