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 提供 ...
随机推荐
- 将 ChatGPT 接入 Zabbix 为告警提供修复建议(对接钉钉)
1.如果接企业微信请参考下面的文章 https://www.txisfine.cn/archives/9c078bb7.html 感谢上述文章的作者提供的思路 ChatGPT 是最近很火的 AI 智能 ...
- Python安装第三库超时的解决方法
Python安装第三库超时的解决方法 1. 在很多时候使用python的时候需要使用到某些第三方库,比较常规的方法是使用cmd命令使用在线安装的方法(前提是在安装好了python相应版本时候配置好了相 ...
- 【剑指Offer】【树】从上到下打印二叉树(层序遍历)
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印. A:创建一个辅助队列,将根节点入队,添加到输出的vector中 循环:到队为空为止 若二叉树有左结点则将左节点入队 若二叉树有右节点则将右 ...
- element-ui动态表单验证
由于项目中固定标签的数据是由后端查询回来的数组,需要进行表单验证,代码如下: <template> <div class="form"> <el-fo ...
- pgsql判断字符串是否为数字
利用正则表达式来对字符串进行匹配 因为工作遇到了一个问题需要对字符串是否可以转换为数值进行判断.今天关于这个问题进行一个分享,流程如下 数字的正则表达式 ^([0-9]+.?[0-9]*|.[0-9] ...
- 宝塔Linux定时shell
定时清除缓存文件 rm -rfv /www/wwwroot/www.xxx.com/runtime 定时解压,常用于定时恢复站点 解压到当前 cd /www/wwwroot/www.xxx.com t ...
- spring boot No qualifying bean of type 'org.apache.catalina.core.ApplicationContext' available
发现创建的ApplictionContext对象还没有containsBean的方法, 找了很久没搞定,后面发现原来是包导入错了. 应该导入 import org.springframework.co ...
- maven-阿里云镜像
<mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots&l ...
- uni-app 通过后缀名区分不同渠道版本
同一套微信小程序代码根据需求要打包成两款小程序,主要逻辑页面一致,主题色不一致,部分页面布局不,逻辑不一致. script命令 先在package.json的script新增命令,根据不同的命令生成对 ...
- HCIA-基础实验FIN-综合网络部署考核
HCIA-基础实验FIN-综合网络部署考核 虽然我选择通过自学hcia并跳过hcia培训直接学习hcip, 但是这个基础实验课程的考核总归还是处理掉比较好, 趁现在能挤出时间(笑). 1 实验需求 1 ...