C++ 可调用对象

一、概述

可调用对象:

  • 函数
  • 函数指针
  • lambda表达式 (C++11加入标准)
  • 重载了函数调用运算符的类 (该类的对象称为函数对象
  • bind创建的对象

使用调用运算符来调用一个可调用对象。调用运算符:为一对括号(),里面放置实参列表(可能为空)。

二、 Lambda表达式

即匿名函数,不命名的可调用对象。每个lambda有它唯一的(未命名的,可以用auto声明类型)类类型。

完整结构:

[capture list](parameter list)->return type{function body}

其中 “ -> return type” 是一起的,为尾置返回。如果函数体中仅有一条return语句,则尾置返回可省略,lambda函数自动推断返回类型。

[capture list]捕获lambda所在函数中的局部变量,即可传入lambda函数中使用,列表可以为空,表示不使用其所在函数的其他变量;也可以设置让编译器自动捕获变量,方法为 [&]--自动捕获传引用方式, [=]--自动捕获传值方式。

最小单元:

[] {}

三、函数指针

函数指针的类型由其返回值类型和实参类型决定。

扫描二维码关注公众号,回复: 13113773 查看本文章

参考: https://www.cnblogs.com/youyoui/p/8933006.html

备注:

标准库function类型适配具有相同调用形式的不同可调用对象;

标准库bind函数适配不同的参数列表。

标准库std::function类型 (C++11加入标准)

function为模板,是通用的函数包装器。 std :: function的实例可以存储、复制和调用任何可调用的对象 ,包括函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针。

做个比喻:

调用形式-》 可调用对象 -》 function函数包装器

电压       -》   插座         -》 万能转换插头

可调用对象的调用形式像是电压(例如,220V),不同类型的可调用对象就像不同国家的电源插口,只要电压相同(即调用形式相同),电源插口不同可以通过万能转换插头(function包装器)在不同国家使用电器。

调用形式是本质,使用的可调用对象只是一种形式,function函数包装器将相同本质的不同形式统一起来。

使用方法:

function<T> f; //可调用对象的调用形式与函数类型T相同。

f: 将f作为条件时,当f含有一个可调用对象时为真,否则为假

参考:https://blog.csdn.net/qq_35721743/article/details/83217416

标准库bind函数

bind是通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来适应原来对象的参数列表。

auto newCallable= bind(callable, arg_list);

猜你喜欢

转载自blog.csdn.net/Cxiazaiyu/article/details/104661773