Wie in der "möglichen Implementierung" von std::apply
gezeigt, sehen wir, dass die Standardbibliotheksfunktion std::invoke
verwendet wird, um das Callable-Objekt F
aufzurufen.warum Aufruf Helper aufrufen und nicht einfach Funktor aufrufen?
Wird es in dieser Situation benötigt? Wenn ja, aus welchem Grund?
Was sind die Vorteile des Schreibens:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
}
über:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::forward<F>(f)(std::forward<Args>(args)...);
}
?