返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++11标准库bind函数应用教程
  • 604
分享到

C++11标准库bind函数应用教程

2024-04-02 19:04:59 604人浏览 独家记忆
摘要

目录bind 是什么?举个栗子1. bind 无参数的普通函数2. bind 1个参数的普通函数3. bind 多个参数的普通函数4. bind 多个参数的普通函数并打乱参数位置5.

bind 是什么?

bind 顾名思义: 绑定

通俗来讲呢,可以这么理解有点像函数指针的意思。

资料上是这么讲的:可以将 bind 函数看做一个通用函数的适配器,它接受一个可调用对象,生成一个新的可以调用对象来“适应”原对象参数列表

它一般调用形式:


// 其中 newCallable 是一个可调用的对象, arg_list 是以逗号分隔的参数列表
// 这时我们调用 newCallable,newCallable 就会调用 callable, 并用 arg_list 传递参数
auto newCallable = bind(callable, arg_list);

好了,重点在于 arg_list 里,那么我们如何传入参数呢

它们是靠这些参数的位置来识别的,形如 _n 之类的, n 是整形, _1 是第一个参数,_2是第二个参数,以此类推。

而名字 _n 是定义在 placeholders 命名空间中, 而 placeholders 本身又定义在 std 命名空间中, 所以形如:

using std:: placeholders::_1

接下来,我们举例几个列子

举个栗子

bind 是在头文件 #include <functional> 中, 首先要包含它。

1. bind 无参数的普通函数


#include <iOStream>
#include <functional> // 包含此头文件

// 普通函数
void Fun()
{
	std::cout << "I am Fun!" << std::endl;
}

// 主函数
int main()
{
	auto fun = std::bind(Fun); // 适配 Fun 函数并返回一个可调用的对象
	fun();
	return 0;
}

调试结果:

2. bind 1个参数的普通函数


#include <iostream>
#include <functional> // 包含此头文件

// 普通函数
void Fun(int a)
{
	std::cout << "I am Fun! a = " << a <<std::endl;
}

// 主函数
int main()
{
	auto fun = std::bind(Fun, std::placeholders::_1); 
	fun(5);
	return 0;
}

调试结果:

3. bind 多个参数的普通函数


#include <iostream>
#include <functional> // 包含此头文件

// 普通函数
int Fun(int a, int b)
{
	return a - b;
}

// 主函数
int main()
{
	auto fun = std::bind(Fun, std::placeholders::_1, std::placeholders::_2); 
	std::cout << fun(5, 2) << std::endl;
	return 0;
}

调试结果:

4. bind 多个参数的普通函数并打乱参数位置


#include <iostream>
#include <functional> // 包含此头文件

// 普通函数
int Fun(int a, int b)
{
	return a - b;
}

// 主函数
int main()
{
	auto fun1 = std::bind(Fun, std::placeholders::_1, std::placeholders::_2);
	auto fun2 = std::bind(Fun, std::placeholders::_2, std::placeholders::_1);
	std::cout << fun1(5, 2) << std::endl;
	std::cout << fun1(5, 2) << std::endl;
	return 0;
}

调试结果:

5. bind 类的成员函数


#include <iostream>
#include <functional> // 包含此头文件

class MyClass {
public:
	MyClass() {}
	~MyClass() {}

public:
	void printInfo() {
		std::cout << "MyClass Info." << std::endl;
	}
};

// 主函数
int main()
{
	MyClass A;
	auto fun = std::bind(&MyClass::printInfo, A);
	fun();
	return 0;
}

调试结果:

再举个应用栗子


#include <iostream>
#include <functional> // 包含此头文件

typedef std::function<void(int)> CallbackType;
// A 类
class MyClassA {
public:
	void regeditCallBack(CallbackType fun)
	{ _callback_fun = fun; }

	void printInfoA(int d) 
	{ _callback_fun(d); }

private:
	CallbackType _callback_fun;
};
// B 类
class MyClassB {
public:
	void printInfoB(int d) {
		std::cout << d << std::endl;
	}
};

// 主函数
int main()
{
	MyClassB B;
	auto funB = std::bind(&MyClassB::printInfoB, B, std::placeholders::_1);

	MyClassA A;
	A.regeditCallBack(funB);
	A.printInfoA(1);

	return 0;
}

调试结果:

到此这篇关于c++11标准库bind函数应用教程的文章就介绍到这了,更多相关C++11 bind函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++11标准库bind函数应用教程

本文链接: https://lsjlt.com/news/159794.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++11标准库bind函数应用教程
    目录bind 是什么?举个栗子1. bind 无参数的普通函数2. bind 1个参数的普通函数3. bind 多个参数的普通函数4. bind 多个参数的普通函数并打乱参数位置5....
    99+
    2024-04-02
  • C++11标准库bind函数应用方法是什么
    这篇文章主要讲解了“C++11标准库bind函数应用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11标准库bind函数应用方法是什么”吧!bind 是什么?bind 顾名思...
    99+
    2023-06-22
  • C++11标准库函数begin和end怎么使用
    这篇文章主要介绍“C++11标准库函数begin和end怎么使用”,在日常操作中,相信很多人在C++11标准库函数begin和end怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11标准库函数b...
    99+
    2023-06-19
  • C++11标准库tuple模板怎么使用
    这篇文章主要讲解了“C++11标准库tuple模板怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11标准库tuple模板怎么使用”吧!什么是tuple作者英语一般,在写文章之前...
    99+
    2023-06-19
  • C++11标准库mem_fn类模板怎么使用
    本篇内容主要讲解“C++11标准库mem_fn类模板怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11标准库mem_fn类模板怎么使用”吧!定制算法算法是C++标准库中非常重要的部...
    99+
    2023-06-19
  • 详解C标准库堆内存函数
    目录概述不同操作系统Ansi C内存分配器实现方案有所不同内存碎片与碎片整理内存分配器的好坏标准void* malloc( size_t size )void free( void*...
    99+
    2024-04-02
  • C语言标准库函数qsort怎么使用
    C语言标准库函数qsort可以用来对数组进行快速排序。qsort函数的原型如下:```cvoid qsort(void *base,...
    99+
    2023-08-25
    C语言 qsort
  • C语言标准库函数fread怎么使用
    C语言标准库函数fread用于从文件中读取数据。函数原型为:```csize_t fread(void *ptr, size_t s...
    99+
    2023-08-25
    C语言 fread
  • C语言标准库函数qsort(快速排序函数)
    qsort函数是C语言标准库中提供的一个快速排序函数。它的函数原型如下:```cvoid qsort(void *base, siz...
    99+
    2023-09-23
    C语言
  • C++ 标准库中有哪些常用的 STL 函数对象?
    c++++ stl 中提供了多种函数对象,可用于对元素进行比较、排序和操作。常见的函数对象包括用于升序排序的 less,用于降序排序的 greater,用于比较相等的 equal_to,...
    99+
    2024-04-25
    stl 函数对象 c++ 标准库
  • C++中标准线程库怎么使用
    本文小编为大家详细介绍“C++中标准线程库怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中标准线程库怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.创建线程异步执行我们可以通过async...
    99+
    2023-06-29
  • C标准库堆内存函数的示例分析
    这篇文章主要为大家展示了“C标准库堆内存函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C标准库堆内存函数的示例分析”这篇文章吧。概述C标准库堆内存函数有4个:malloc、free...
    99+
    2023-06-15
  • Python标准库之collections包的使用教程
    前言 Python为我们提供了4种基本的数据结构:list, tuple, dict, set,但是在处理数据量较大的情形的时候,这4种数据结构就明显过于单一了,比如list作为数组在某些情形插入的效率会比...
    99+
    2022-06-04
    标准 教程 Python
  • Python标准库之time库的使用教程详解
    目录1.时间戳2.结构化时间对象3.格式化时间字符串4.三种格式之间的转换time模块中的三种时间表示方式: 时间戳 结构化时间对象 格式化时间字符串 1.时间戳 时间戳1970.1...
    99+
    2024-04-02
  • 用C标准数学库精确计算标准正态分布的CDF
    要使用C标准数学库精确计算标准正态分布的累积分布函数(CDF),可以使用标准库中的`erf()`函数。`erf()`函数返回一个以x...
    99+
    2023-09-26
    C
  • Kotlin标准库函数使用分析及介绍
    目录1.apply 函数2.let 函数3.run函数4.with 函数5.also6.takeIf7.takeUnless1.apply 函数 apply函数可以看做是一个配置函数...
    99+
    2024-04-02
  • C/C++ Qt数据库与SqlTableModel组件应用教程
    SqlTableModel 组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组...
    99+
    2024-04-02
  • C++中标准线程库的基本使用介绍
    目录1.创建线程异步执行2.通过使用互斥锁防止线程冲突3.采用信号量控制线程的运行4.通过promise实现进程间通信总结Qt的封装程度比较高的线程类用多了,发现C++标准库里面的线...
    99+
    2024-04-02
  • Python基础之标准库和常用的第三方库案例教程
    Python基础:标准库和常用的第三方库 Python的标准库有: 名称 作用 ...
    99+
    2024-04-02
  • C/C++ Qt 数据库QSql增删改查组件应用教程
    Qt SQL模块是Qt中用来操作数据库的类,该类封装了各种SQL数据库接口,可以很方便的链接并使用,数据的获取也使用了典型的Model/View结构,通过MV结构映射我们可以实现数据...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作