Является ли синтаксически правильным выражение C++ for_each(v, [](строка x)?

Является ли приведенное ниже выражение действительным для for_each()?

for_each(v,[](string x){
    cout<<x<<endl;
});

Ссылка: CppCoreGuidelines.md # p3-express-intent

Вышеприведенное выражение выдает ниже ошибки:

error: no matching function for call to ‘for_each(std::vector<std::__cxx11::basic_string<char> >&,
main()::<lambda(std::__cxx11::string)>)’
     });
      ^
In file included from /usr/include/c++/5/algorithm:62:0,
                 from test.cpp:4:
/usr/include/c++/5/bits/stl_algo.h:3761:5: note: candidate: template<class _IIter, class _Funct> _Funct std::for_each(_IIter,
_IIter, _Funct)
     for_each(_InputIterator __first, _InputIterator __last, _Function __f)
     ^
/usr/include/c++/5/bits/stl_algo.h:3761:5: note:   template argument deduction/substitution failed:
test.cpp:60:6: note:   deduced conflicting types for parameter ‘_IIter’ (‘std::vector<std::__cxx11::basic_string<char> >’ and
‘main()::<lambda(std::__cxx11::string)>’)
     });

1 ответ

Ну, основные рекомендации упоминают for_eachне std::for_each, Поэтому сложно ответить на ваш вопрос...

  • Если они на самом деле имеют в виду std::for_each, тогда это будет опечатка, так как она требует двух итераторов - если они не ссылаются на будущую версию std::for_each это может быть представлено предложениями Рэнджа.

  • Если они имеют в виду общий for_eachтогда это может быть просто:

    template <typename TContainer, typename TF>
    void for_each(TContainer&& c, TF&& f)
    {
        for(auto&& x : c) f(x);
    }
    
Другие вопросы по тегам