Является ли синтаксически правильным выражение 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); }