std::function<T1(T2)>
优于原始T1 (*)(T2)
的优势是什么?
答案 0 :(得分:33)
std::function
可以容纳多个函数指针,即仿函数。
#include <functional>
void foo(double){}
struct foo_functor{
void operator()(float) const{}
};
int main(){
std::function<void(int)> f1(foo), f2((foo_functor()));
f1(5);
f2(6);
}
如示例所示,您也不需要完全相同的签名,只要它们兼容(即,std::function
的参数类型可以传递给包含的函数/函子)。
答案 1 :(得分:15)
std::function
可以保存函数对象(包括lambdas),以及具有正确签名的函数指针。所以它更通用。
答案 2 :(得分:6)
除了更清晰的外观和更具描述性的语法外,std::function
还可以存储任何可调用的对象:
更不用说将对象存储,复制和绑定到成员函数更容易,更直观。