C++ 11 std::mem_fn
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的更多相关文章
- C++ 11 std::function std::bind使用
cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码: auto closeItem = MenuItemImage::create( "CloseNorm ...
- (C++) 笔记 C++11 std::mutex std::condition_variable 的使用
#include <atomic> #include <chrono> #include <condition_variable> #include <ios ...
- C++11 std::function用法
转自 http://www.hankcs.com/program/cpp/c11-std-function-usage.html function可以将普通函数,lambda表达式和函数对象类统一起来 ...
- C++11 std::copy
这个函数并不是简单的 while(first != last) { *result = *first; result++; first++; } 事实上这种写法是最具普适性的,值要求inputIter ...
- C++11 std::move和std::forward
下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...
- C++11 std::ref使用场景
C++本身有引用(&),为什么C++11又引入了std::ref(或者std::cref)? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用.如下例子: # ...
- C++11 std::unique_lock与std::lock_guard区别及多线程应用实例
C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为.通常的做法是在修改共享数据成员的时候进行加锁--mutex.在使用锁的时候通 ...
- C++11 std::shared_ptr总结与使用
最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结.方便后续使用. std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用 ...
- c++11——std::function和bind绑定器
c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有ope ...
- C++11 std::async 包装实体店::packaged_task
更好的方式 C++11中提供了操作多线程的高层次特性. std::packaged_task 包装的是一个异步操作,相当与外包任务,好比我大阿里把电话客服外包给某某公司. std::future 提供 ...
随机推荐
- 学编程很盲目?不会代码?你可以来瞧瞧这本。是一本难得的Python 入门手册。
Python语言及其应用,pdf高清免费下载地址 获取码:d414 内容简介 · · · · · · 本书介绍Python 语言的基础知识及其在各个领域的具体应用,基于最新版本3.x.书中首先介绍了 ...
- JDK卸载与JDK12 安装
JDK卸载与JDK12 安装 一.JDK卸载 控制面板>程序和功能>jdk程序(java 8 update 391:java SE Development Kit8 update 391) ...
- Unity Vuforia 动态替换识别图
1.在Unity里 Vuforia 用来做识别信息的是 StreamingAssets 下 Vuforia文件夹内的 Dat和XML 文件. 2.想要替换识别图需要在Vuforia官网里替换识别图 ( ...
- ggplot2绘制饼图
# 加载 ggplot2 包 library(ggplot2) # 加载数据 data <- data.frame(category = c("A", "B&quo ...
- 课程表及事件提醒app-界面原型设计
前端设计: 暂定为8个主要界面:程序初始界面.主界面(首页).课表界面."我的"界面.登录界面.注册界面.创建事件界面.新建课表界面 设计思路: 项目结构 三个主要界面 首页: 课 ...
- 常用得cron表达式
0 10 0 1 * ? //每月1号的0:10:00执行 0 01 00 28-31 * ? #月底最后一天早上凌晨1点执行 异常: 查询是否有特殊字符: cat -A ***.sh 解决方法: 1 ...
- cnpm 安装不上
以管理员身份运行power shell,输入以下命令: set-ExecutionPolicy RemoteSigned 出现选项之后,输入A,回车,在输入 get-ExecutionPolicy 出 ...
- [前端js] 爬取亿图脑图大纲
这段程序使看到了好的东西,又没有零钱的产物 还是老师让画思维导图我不想画还想白嫖的想法 用时20分钟 就拿这个来作为例子 https://mm.edrawsoft.cn/template/286842 ...
- C#笔记誊录<二>
c#编译器把源码编译成IL(中间)代码,再由CLR通过即时编译器把IL代码编译成本机机器语言(平台语言) www.webkaka.com//测试服务器的网速 ctrl+k+d 代码对其 CTRL+K+ ...
- Windows下的挖矿木马查杀
MS016小组(原创) 上一篇文章 简单讲了一下挖矿木马 大概流程 文章地址: https://www.cnblogs.com/ms016/articles/7978880.html 今天讲分析一个 ...