Há uma resposta explicando por que std::find_if aceita um predicado por value .
Mas e se eu definir minha própria função que usa um predicado como parâmetro?
Por exemplo, considere as seguintes funções que chamam uma determinada função para cada elemento da tupla:
template <typename... Args, typename Func, std::size_t... index>
constexpr void for_each(const std::tuple<Args...>& t, Func&& f, std::index_sequence<index...>)
{
(f(std::get<index>(t)), ...);
}
template <typename... Args, typename Func>
constexpr void for_each(const std::tuple<Args...>& t, Func&& f)
{
for_each(t, f, std::index_sequence_for<Args...>{});
}
neste código f
é passado por referência de rvalue, é o caminho certo?
Uso de amostra:
auto t = std::make_tuple(5, std::string(""));
for_each(t, [](auto& field)
{
std::cout << field << std::endl;
});
Não deveria haver const Func&
?