Vic*_*ers 8 c++ stl function-pointers c++11 std-function
我有麻烦搞清楚这两个函数包装之间的差异std::function和std::mem_fn.从描述中,在我看来,std :: function确实std::mem_fn做到了.在这种情况下将一个使用std::mem_fn过std::function?
Bar*_*rry 20
你不能真正比较std::function有std::mem_fn.前者是您指定类型的类模板,后者是具有未指定返回类型的函数模板.实际上并没有你真正考虑一个与另一个的情况.
更好的比较可能是mem_fn和之间std::bind.在那里,对于指向成员的指针的特定用例,mem_fn如果您想要做的只是传递所有参数,那么将会更加冗长.鉴于这种简单类型:
struct A {
int x;
int getX() { return x; }
int add(int y) { return x+y; }
};
A a{2};
Run Code Online (Sandbox Code Playgroud)
你如何制作一个只调用getX()给定的仿函数A?
auto get1 = std::mem_fn(&A::getX);
auto get2 = std::bind(&A::getX, _1);
get1(a); // yields 2
get2(a); // same
Run Code Online (Sandbox Code Playgroud)
并采取额外的论据add?
auto add1 = std::mem_fn(&A::add);
auto add2 = std::bind(&A::add, _1, _2);
add1(a, 5); // yields 7
add2(a, 5); // same
Run Code Online (Sandbox Code Playgroud)
因此在这种情况下mem_fn更简洁.但是,如果我们想要绑定一个特定的参数,比如对一个给定的调用,你只能这样做:add(5)Abind
auto add_5 = std::bind(&A::add, _1, 5);
add_5(a); // yields 7
Run Code Online (Sandbox Code Playgroud)
最终,之间没有比较function和mem_fn,但有时喜欢mem_fn到bind.