std::function 与 std::bind

函数封装与绑定 std::function 与 std::bind

在 stl 标准库中,提供了一些函数包装的模板,它们可以对函数或者可调用的对象进行包装,方便在其他函数中调用

封装 std::function

一个通用的多态函数封装器,它将一个可调用的对象,例如:

  • 函数指针
  • 函数对象
  • Lammbda函数等
    进行封装,方便在后续的代码中调用,先看下 function 类模板的定义


函数返回类型:R
函数参数类型:Args

实际的例子:

我们可以将函数 multiply 用 std::function 包装起来

我们还可以使用 std::function 封装类的成员函数、类的成员变量

类型擦除模式(std::function 实现了一种叫做类型擦除的模式)


分别调用了 封装加减乘功能的 3个 function 对象

封装类的成员

对于封装类的成员,可以直接使用 std::mem_fn

绑定 std::bind(是一个函数模板)

它用来生成一个函数调用的转发包装器(也就是一个函数对象),调用这个包装器时,就相当于调用它所包装的函数或者函数对象 f,并使用 args 作为函数的参数

例子:

占位符
_1,_2,_3,......

值传递(当需要将变量绑定作为参数时,需要注意一下)

引用传递(std::cref)


posted @ 2025-01-21 00:22  爱新觉罗LQ  阅读(93)  评论(0)    收藏  举报