std::bind可以绑定成员变量

2023-11-17

#include <iostream>
#include <string>
#include <functional>

using namespace std;

class MyClass
{
public:
	MyClass(){}
	MyClass(int a): m_i(a){}
	~MyClass(){}

	void Get(int a, string str)
	{
		cout << a << " " << str << endl;
	}
public:
	int m_i;
};

// 绑定成员函数
void Test_Bind_Member_Func()
{
	MyClass myclass(2);// std::placeholders::_1
	std::function<void(int, string str)> m_fun = std::bind(&MyClass::Get, &myclass, 100, std::placeholders::_2);	// 这里是封装的返回值是引用类型才可以修改类的成员函数
	if (m_fun)
	{
		m_fun(111, "acb"); // 输出111 abc
	}
}


// 一种特殊场景,可以绑定类的成员变量,可以通过函数调用的方式访问和修改它
// 可以修改的前提是,可调用对象封装器封装的函数返回值是引用类型
void Test_Bind_Member_Variable()
{
	MyClass myclass(2);
	std::function<int&(void)> m_v = std::bind(&MyClass::m_i,&myclass);	// 这里是封装的返回值是引用类型才可以修改类的成员变量
	if (m_v)
	{
		cout << "m_v: " << m_v() << endl;
		m_v() = 3;															// 相当于修改成员变量
		cout << "m_v: " << m_v() << endl;
	}
}

int TestFunc(int a, char c, float f)
{
	cout << a << endl;
	cout << c << endl;
	cout << f << endl;

	return a;
}

void Test()
{
	auto bindFunc1 = bind(TestFunc, std::placeholders::_1, 'A', 100.1);
bindFunc1(10);

cout << "=================================\n";

auto bindFunc2 = bind(TestFunc, std::placeholders::_2, std::placeholders::_1, 100.1);
bindFunc2('B', 10);

cout << "=================================\n";

auto bindFunc3 = bind(TestFunc, std::placeholders::_2, std::placeholders::_3, std::placeholders::_1);
bindFunc3(100.1, 30, 'C');
}


int main()
{
	Test_Bind_Member_Func();		// 绑定成员函数
	Test_Bind_Member_Variable();	// 绑定成员变量

	getchar();
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::bind可以绑定成员变量 的相关文章

随机推荐

  • java mysql 断开连接_mysql java连接异常及断开解决秘籍

    3 The last packet sent successfully to the server was 0 milliseconds ago The driver has not received any packets from th
  • 前端一年的经验,面试官都会问一些什么问题呢?都是这样一些的问题

    面试准备阶段 学习以及复习基础知识 这一定是第一步需要做的事情 先制定规划 然后按照这一条既定的规划去学习以及复习 可分为六部分去准备 css部分 像 css这一部分 面试必问 但是它的东西很杂很多 我不知道有多少人和我感觉一样 学习前端最
  • Oracle中Delete和Commit操作的流程分析

    以后还会陆续加入其他各种操作的实现机制 1 删除 Delete 流程 Oracle读Block 数据块 到Buffer Cache 缓冲区 如果该Block在Buffer中不存在 在Redo Log Buffer 重做日志缓冲区 中记录De
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • ES6 method写法与TypeError: is not a constructor

    公司前端最近开始强推ESlint 很多文件需要逐步修改为符合ESlint规则的形式 结果遇到了一个神奇的问题 有一段类似这样的代码 let obj init function el 此处ESlint检查提示 Expect method sh
  • k8s部署tomcat及web应用_在k8s部署tomcat

    小试牛刀 准备编排文件tomcat yaml 包含两部分 副本rc和service配置可为两个文件 不过我们此处合并为一个 rc副本相关 apiVersion extensions v1beta1 表示Deployment调度配置 kind
  • Keras默认权值初始化方式

    20230117 在最初使用Keras进行神经网络编程的时候 除了设置神经元个数 层数 或者激活函数之后 基本上对神经网络内部就不怎么管了 所以最后很多参数都是默认的 这种情况一般遇到的数据集问题 都能轻易解决 一般不是层数非常深的神经网络
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Kali系统(Debian 10.3) 遇到的问题

    目录 问题一 Kali系统 相关技术网站 博客 文章 论坛 工具包 包跟踪 提交BUG 问题二 黑客入门 手痒地方 问题三 Kali系统 MySQL问题Can t connect to local MySQL server through
  • 边缘计算操作系统安装及测试实验报告

    边缘计算操作系统安装及测试 一 实验目的 二 实验环境 三 实验原理 1 系统组成部分 2 总体数据流程 四 实验步骤及结果 1 安装 Docker 和 Docker Compose 2 下载 EdgeX compose 文件 3 运行Ed
  • qt中clicked(bool checked)和toggled(bool checked)的区别

    先来看qt文档的解释 上面看出 共同点是 当点击按钮时 状态信号都会被发送 不同点 clicked this signal is not emitted if you call setDown setChecked or toggle to
  • 5年测试面试要20K,面试三个问题把我打发走了···

    都说金三银四 金九银十跳槽涨薪季 我是着急忙慌的准备简历 5年软件测试经验 可独立测试大型产品项目 熟悉项目测试流程 薪资要求 5年测试经验起码能要个20K吧 我加班肝了一页半简历 投出去一周 面试电话倒是不少 自信满满去面试 现场被问了这
  • Nmap源码分析(服务与版本扫描)

    Nmap源码分析 服务与版本扫描 2012年8月23日 在进行端口扫描后 Nmap可以进一步探测出运行在端口上的服务类型及应用程序的版本 目前Nmap可以识别几千种服务程序的签名 Signature 覆盖了180多种应用协议 比如 端口扫描
  • java写后端接口中mapper的一些操作

    文章目录 Mybatis Mapper的动态SQL语句问题 一 if 二 choose when otherwise 三 where 四 trim 元素来定制 where 元素的功能 五 set 动态地在行首插入 SET 关键字 六 for
  • PTA 7-4 统计学生平均成绩与及格人数 (15 分)

    本题要求编写程序 计算学生们的平均成绩 并统计及格 成绩不低于60分 的人数 题目保证输入与输出均在整型范围内 输入格式 输入在第一行中给出非负整数N 即学生人数 第二行给出N个非负整数 即这N位学生的成绩 其间以空格分隔 输出格式 按照以
  • C语言函数大全-- y 开头的函数

    y 开头的函数 1 yperror 1 1 函数说明 1 2 演示示例 2 yp match 2 1 函数说明 2 2 演示示例 3 y0 零阶第二类贝塞尔函数 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 y1 一阶第二类贝塞
  • 在Vue中使用flex布局 echarts多图标不能自适应缩放问题

    前言 最近有个项目需要用到echarts绘制多个图表 需求是要支持大屏展示 还有需要支持不同比例的缩放和任意手动缩放 因此 深入学习了echarts和flex布局 虽然遇到很多问题 但都一一解决了收获良多 故此写下遇到的问题与坑 与之共勉
  • go 进阶 多路复用支持: 二. Accept/Read/Write

    目录 一 通过httpServer服务端引用Accept 二 Listener Accept 等待连接 三 Conn Read读数据 Conn Write写数据 四 gopark 阻塞 五 netpoll 唤醒等待队列中挂起的协程 什么时候
  • C#桌面应用程序打包

    使用微软的技术开发windows桌面应用程序是很快捷方便的 开发完之后肯定要打包安装才能发布 以前有做过但过长时间没有打包一下子还真有些遗忘 今天专门又重温了一些 干脆写下来算是加深些印象 以后需要时也好有个参考 感觉有很多技术上手都没有太
  • std::bind可以绑定成员变量

    include