C++ 可调用对象

一、概述

可调用对象:

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

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

二、 Lambda表达式

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

完整结构:

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

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

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

最小单元:

[] {}

 

三、函数指针

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

参考: 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);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuyuelongfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值