如“可能的实现”所示,std::apply
我们看到标准库函数std::invoke
用于调用可调用对象F
。
在这种情况下需要吗?如果是这样,出于什么原因?
写作有什么好处:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
}
超过:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::forward<F>(f)(std::forward<Args>(args)...);
}
?