C/C++C++11新特性:std::bind
Posted mick_seu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++C++11新特性:std::bind相关的知识,希望对你有一定的参考价值。
相关知识参考:
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实现观察者模式