为什么使用invoke helper而不是只调用functor?

Cof*_*ode 10 c++ functor c++17

如"可能的实现"所示,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)...);
}
Run Code Online (Sandbox Code Playgroud)

过度:

template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
    return std::forward<F>(f)(std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

T.C*_*.C. 8

指向成员的指针是Callable,和invoke(或者INVOKE,正如标准中已知的那样,很快就会有七个子弹点构造)魔术处理这种情况(好吧,四个,很快就会有六个案例),而函数调用语法没有.