首页 > 编程语言 > 详细

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

时间:2018-06-05 11:13:54      阅读:637      评论:0      收藏:0      [点我收藏+]

函数模板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()使用实例

原文:https://www.cnblogs.com/bencai/p/9138463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!