函数模板 men_fn()相当于 STL 中内置的仿函数, 把成员函数转为函数对象, 使用对象指针进行绑定.
用法类似于 C++11 中的 bind.
- template <class Ret, class T>
- /* unspecified */ mem_fn (Ret T::* pm);
返回的对象的类型具有以下属性:
1)它的函数调用将 T 类型的对象 (或引用或指向它的指针) 作为第一个参数, 并将其作为附加参数用于 pm(如果有)所采用的参数. 这种以 fn 作为第一个参数的调用的效果与调用 fn.* pm 或 (* fn).* pm(如果 fn 是一个指针) 相同, 并转发任何其他参数.
2)它有一个成员 result_type, 定义为 Ret 的别名(这是 pm 的返回类型).
3)如果 pm 指向的成员不带任何参数, 则它有一个成员 argument_type, 定义为 T * 的别名.
4)如果由 pm 指向的成员接受一个参数, 则它具有成员 first_argument_type(定义为 T * 的别名)和成员 second_argument_type(定义为 pm 所采用参数的别名).
5)它不是可移动的可构建的, 不可移植的, 可以复制的.
参数: pm
指向成员函数的指针.
返回值:
返回一个函数对象, 当被调用时, 它将对作为第一个参数传递的对象调用 pm. 返回类型未指定, 但返回的类型是具有上述属性的函数对象类.
- example:
- // mem_fn example
- #include <iostream> // std::cout
- #include <functional> // std::mem_fn
- struct int_holder {
- int value;
- int triple() {return value*3;}
- };
- int main () {
- int_holder five {5};
- // 直接调用成员函数
- std::cout << five.triple() << '\n'; //15
- // 使用 mem_fn 调用
- auto triple = std::mem_fn (&int_holder::triple);
- std::cout << triple(five) << '\n'; //15
- return 0;
- }
参考: http://www.cplusplus.com/reference/functional/mem_fn/
C++11 中函数 mem_fn()使用实例
来源: http://www.bubuko.com/infodetail-2631536.html