std::function<T1(T2)>
比原版有什么优势T1 (*)(T2)
?
问问题
20188 次
3 回答
35
std::function
可以容纳多个函数指针,即functors。
#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
可以将参数类型传递给包含的函数/仿函数)。
于 2012-07-05T21:42:29.213 回答
16
std::function
可以保存函数对象(包括 lambda),以及具有正确签名的函数指针。所以它更通用。
于 2012-07-05T21:40:47.010 回答
9
除了更简洁的外观和更具描述性的语法外,std::function
还可以存储任何可调用对象:
- 职能
- lambda 表达式
- 绑定表达式
- 函子
更不用说将对象存储、复制和绑定到成员函数更容易和更直观。
于 2014-01-14T18:04:37.090 回答