mem_fn

想到member function 成员函数

这还真就是用来调用成员函数的

普通的函数我们通过函数指针可以调用,但对于成员函数的调用稍微复杂一点,需要对象,也即this指针

因为成员函数和对象并不存储在一起,一个对象的内存空间不包括函数代码,否则每个对象都包含自己的函数代码,内存就比较浪费

看下面的例子就懂了

#include <functional>
#include <iostream> struct Foo {
void display_number(int i) {
std::cout << "number: " << i << '\n';
}
int data = 7;
}; int main() {
Foo f;
auto print_num = std::mem_fn(&Foo::display_number);
print_num(f, 42); auto access_data = std::mem_fn(&Foo::data);//专门获取对象中data值的函数
std::cout << "data: " << access_data(f) << '\n';//传入对象f,即获取f的data值
}

C++ 11 std::mem_fn的更多相关文章

  1. C++ 11 std::function std::bind使用

    cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码: auto closeItem = MenuItemImage::create( "CloseNorm ...

  2. (C++) 笔记 C++11 std::mutex std::condition_variable 的使用

    #include <atomic> #include <chrono> #include <condition_variable> #include <ios ...

  3. C++11 std::function用法

    转自 http://www.hankcs.com/program/cpp/c11-std-function-usage.html function可以将普通函数,lambda表达式和函数对象类统一起来 ...

  4. C++11 std::copy

    这个函数并不是简单的 while(first != last) { *result = *first; result++; first++; } 事实上这种写法是最具普适性的,值要求inputIter ...

  5. C++11 std::move和std::forward

    下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...

  6. C++11 std::ref使用场景

    C++本身有引用(&),为什么C++11又引入了std::ref(或者std::cref)? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用.如下例子: # ...

  7. C++11 std::unique_lock与std::lock_guard区别及多线程应用实例

    C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为.通常的做法是在修改共享数据成员的时候进行加锁--mutex.在使用锁的时候通 ...

  8. C++11 std::shared_ptr总结与使用

    最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结.方便后续使用. std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用 ...

  9. c++11——std::function和bind绑定器

    c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有ope ...

  10. C++11 std::async 包装实体店::packaged_task

    更好的方式 C++11中提供了操作多线程的高层次特性. std::packaged_task 包装的是一个异步操作,相当与外包任务,好比我大阿里把电话客服外包给某某公司. std::future 提供 ...

随机推荐

  1. [Spring] SpringBoot启动流程

    SpringBoot启动流程 实例化流程 推断应用类型,创建的是REACTIVE应用.SERVlET应用.NONE三种中的一种 使用SpringFactoreisLoader查找并加载classpat ...

  2. 码云或github的"免费服务器"

    目录 一. 码云及工具介绍 二. 操作步骤 (1) 创建vue-cli项目 (2) 码云创建仓库 (3) 修改并提交项目到码云仓库 (4) 运行项目 (5) 注意点 三. 尾声 对于学生党来说,买个服 ...

  3. php 允许跨域

    1.控制器 header("Access-Control-Allow-Origin: *"); class Index extends Api {} 2.app/admin/con ...

  4. js判断任意数值接近数组中的某个值

    可以是数组,也可以是数组对象,看需求定义 let val = '' for (let i = 0; i < this.allData.length; i++) { if (this.days & ...

  5. vue中input触发方法中调用ajax,导致input失去焦点问题

    发现在vue中监控input绑定的值,调用方法时,如果方法中有调用后端接口(使用Ajax),会导致input输入框失去焦点,这样导致的问题就是每输入一个字符,就要重新聚焦一次,可通过以下方式在方法中重 ...

  6. Telnet 连接smtp协议手动发邮件

    下面实验以QQ邮箱为例(比较多人用,其它邮箱也一样) Step1.打开CMD 输入:telnet SMTP服务器 SMTP端口地址   连接smtp服务器 Step2. 输入:helo 内容 (向它( ...

  7. 通过pxelinux引导管理器网络引导slax linux

    前提条件 1.用于引导服务器具备tftp服务和http服务: 2.使用syslinux项目下lpxelinux.0做为pxe引导文件,原因:测试发现lpxelinux.0对http协议支持更好,可以更 ...

  8. java list的六种赋值方式

    public static void main(String[] args) { //第一种赋值 List<String> list1 = Arrays.asList("stri ...

  9. js中的加法运算

  10. CRON表达式转换成中文

    目录 1,cron表达式生成器 2,cron表达式 一,结构 二.各字段的含义 三.常用表达式例子 3,转换成中文: 1,CronExpParserUtil 2,WeekEnum 3,测试: 4,测试 ...