Вы используете auto
и лямбду, которые оба являются C ++ 11. К счастью, в вашем случае оба могут быть заменены тривиально.
Лямбды - это просто синтаксический сахар для классов функторов, поэтому вы можете использовать вместо них:
struct compare_files_by_name {
std::string target;
compare_files_by_name(const std::string& target) : target(target) {}
bool operator()(const files& f) {
return f.name == target;
}
};
И то, что find_if
возвращаетlist<files>::const_iterator
. Если сложить это вместе, вы получите:
bool isFileSensible(const string& filename)
{
compare_files_by_name comp(filename);
std::list<files>::const_iterator match = std::find_if(myfilecollection.cbegin(), myfilecollection.cend(),comp);
return match != myfilecollection.cend();
}
PS: Привыкнув к auto
, я нахожу странным полностью выписать тип итератора. Я, вероятно, написал бы это как
return myfilecollection.cend() != std::find_if(....
просто, чтобы не указывать тип итератора.