Проблемы с кодом и возможные варианты решения ниже:
1.A Lambda expression
не std::function
, его можно хранить только в объекте типа std::function
.
Подход: (с вашей существующей подписью):
std::function<void()> f = []() -> void { // do something };
for_each(vec.begin(), vec.end(), f);
2.Лучшим решением было бы использовать Callable
в качестве параметра (Перейти к концу ответа).
3.Если вы хотите использовать свою собственную версию for_each
, почему бы не следовать реализации, которая совместима с другими алгоритмами или, в этом отношении, с реализацией for_each
в заголовке алгоритма.
Имеет все, что вы хотите, а также в соответствии с другими стандартными алгоритмами: ru.cppreference.com /gorithms / for_each :
template<class InputIt, class UnaryFunction>
constexpr UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
for (; first != last; ++first) {
f(*first);
}
return f;
}