C++11 中的std::function和std::bind

2021-03-19 09:25

阅读:503

标签:可调用对象   保存   ref   参数   col   mina   适配   cti   code   

1. 背景:

  C++有不同的调用形式:函数指针、lambda表达式、有operator()的类对象等。

  形式不同但调用方式却相同。为了能够统一,引入std::function和std::bind,来实现。

例子:

// 普通函数
int add(int a, int b){return a+b;} 

// lambda表达式
auto mod = [](int a, int b){ return a % b;}

// 函数对象类
struct divide{
    int operator()(int denominator, int divisor){
        return denominator/divisor;
    }
};

使用std::function后,可将其都保存下来

std::functionint(int ,int)>  a = add; 
std::functionint(int ,int)>  b = mod ; 
std::functionint(int ,int)>  c = divide(); 

 

2. std::function

  std::function是一个可调用对象包装器,可以保存以上所有形式的可调用对象,并且允许延迟执行等操作。比普通函数指针更加灵活和遍历。

 

3. std::bind

  作为一个通用的函数适配器,接受一个可调用对象,生成另一个可调用对象。如std::function, 类成员函数

  可以讲可调用对象和参数绑定在一起并且保存。减少调用参数。

  a. 绑定一个引用参数:

    使用关键字ref()

 

C++11 中的std::function和std::bind

标签:可调用对象   保存   ref   参数   col   mina   适配   cti   code   

原文地址:https://www.cnblogs.com/dylan-liang/p/13943972.html


评论


亲,登录后才可以留言!