这个问题已经在这里有一个答案:
- 我应该使用std ::函数或C ++函数指针? 5个回答
什么是优势std::function<T1(T2)>
在原始T1 (*)(T2)
这个问题已经在这里有一个答案:
什么是优势std::function<T1(T2)>
在原始T1 (*)(T2)
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);
}
在Ideone活生生的例子。
如上例所示,您也不必完全相同的签名,只要它们是兼容的 (即参数类型std::function
可以传递给所包含的功能/仿函数)。
std::function
可以保持功能对象(包括lambda表达式),以及函数指针与正确的签名。 因此,它是更通用。
除了整洁的外观和更具描述性的语法, std::function
可以存储任何可调用对象:
更何况,存储,复制和对象绑定到成员函数更容易,更直观。