std::function与 std::bind

std::function

std::function 是一个模板类,可以存储任意类型的可调用对象(如函数、lambda表达式、函数对象、成员函数指针等)。其最大的优势是提供了一种通用、多态的方式来存储、复制和调用这些可调用对象。它通常与 std::bind 或 lambda 一起使用来存储已绑定参数的函数调用。

例子:

#include <iostream>
#include <functional>

void print_num(int i) {
    std::cout << i << '\n';
}

int main() {
    std::function<void(int)> func = print_num;
    func(10);
}

std::bind

std::bind 创建一个新的可调用对象,它将给定的函数和参数“绑定”到一起。你可以使用 std::placeholders 来指定哪些参数应该被延迟绑定,即在调用时确定。

例子:

#include <iostream>
#include <functional>

void print_sum(int a, int b) {
    std::cout << a + b << '\n';
}

int main() {
    auto func = std::bind(print_sum, std::placeholders::_1, 5);
    func(10);  // 打印 15
}

在这个例子中,我们绑定了 print_sum 函数,使其第二个参数总是 5,而第一个参数在调用时提供。

结合 std::functionstd::bind

你可以使用 std::bind 来“绑定”函数的一些参数,然后将结果存储在 std::function 对象中。

例子:

#include <iostream>
#include <functional>

void print(int x, int y) {
    std::cout << "x: " << x << ", y: " << y << std::endl;
}

int main() {
    std::function<void(int)> bound_print = std::bind(print, 42, std::placeholders::_1);
    
    bound_print(24);  // 打印 "x: 42, y: 24"
}

在这个例子中,我们绑定 print 函数的第一个参数为 42,而第二个参数由 std::function 对象的调用者提供。

这种结合使得 std::functionstd::bind 非常灵活,可以很容易地创建和存储具有不同参数和绑定值的函数调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值