C/C++C++11新特性:std::bind

Posted mick_seu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++C++11新特性:std::bind相关的知识,希望对你有一定的参考价值。

相关知识参考:

C++11 新特性:Lambda 表达式(豆子)

std::function(碎语心弦)

c++11 function、bind用法详解(猿码先生)


std::bind可以根据当前已有的可调用对象,构造出一个新的可调用对象,有了bind,我们可以实现“动态生成新的函数”的功能。

#include <iostream>
#include <thread>
#include <vector>

typedef std::function<void(uint32_t)> CallBack1;
typedef std::function<void(void)> CallBack2;

class Box 
	private:
		uint32_t price_ = 10;
	public:
		explicit Box(uint32_t price):price_(price)  
		void run(uint32_t idx) 
			std::cout << idx << ": " << price_ << std::endl;	
		
;

void Exec1(const CallBack1& cb) 
	cb(1);


void Exec2(const CallBack2& cb) 
	cb();


int main() 
	Box b1(20);
	Exec1(std::bind(&Box::run, &b1, std::placeholders::_1));// 相当于  b1.run(uint32_t idx)
	Exec2(std::bind(&Box::run, &b1, 2));			// 相当于  b1.run(2)

	return 0;

可以发现,同一个函数 run,我们使用 bind  动态生成了两个 std::function,非常灵活


以上是关于C/C++C++11新特性:std::bind的主要内容,如果未能解决你的问题,请参考以下文章

C11新特性之std::function与std::bind

C++11之用std::function和std::bind实现观察者模式

C/C++C++11新特性:=default 和 =delete

测试随笔标题

面试必问的C++11新特性代码实践

C++11新特性:13—— C++11非受限联合体(union)