Come mostrato nella 'possibile implementazione' di std::apply
, vediamo che la funzione di libreria standard std::invoke
viene utilizzata per richiamare l'oggetto richiamabile F
.perché usare invocare helper anziché chiamare semplicemente functor?
È necessario in questa situazione? se sì, per quale motivo?
Quali sono i vantaggi della scrittura:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
}
oltre:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::forward<F>(f)(std::forward<Args>(args)...);
}
?