C++11中函数mem_fn()使用实例

函数模板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/

猜你喜欢

转载自www.cnblogs.com/bencai/p/9138463.html
今日推荐