可调用对象类型

在 C++ 中,可调用对象包括以下几种:

  • 函数
  • 函数指针
  • lambda 表达式
  • bind 创建的对象
  • 重载了函数调用运算符的类

函数表与 std::function

当我们需要定义一个函数表来存储指向一组可调用对象的指针时,普通的 map 容器无法直接存储 lambda 表达式。这时我们需要使用 <functional> 头文件中的 std::function 类。

使用 std::function 可以统一存储不同类型的可调用对象。

处理重载函数

当需要将重载的函数存入 function 类对象时,需要使用 lambda 表达式来指定具体版本,以消除二义性。例如:

1
auto f = [](int x) { return overloaded_func(x); };  // 指定使用接受 int 参数的版本