如
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,Args &&... args){ return std::forward<F>(f)(std::forward<Args>(args)...); }
?
解决方法
指向成员的指针是Callable,并且调用(或者INVOKE,因为
soon-to-be-seven-bullet-point construct在标准中已知)的魔法处理这种情况(好的,四个并且很快将是六个实例),而函数调用语法没有.