首页 > 编程语言 >C++中的std::function

C++中的std::function

时间:2024-12-02 16:58:02浏览次数:9  
标签:std function 调用 封装 C++ func include

std::function()是C++标准库中的一个通用多态函数包装器, 它可以存储,复制和调用任意可调用目标(函数,lambda表达式,绑定表达式或其他函数对象).

std::function占用固定尺寸的内存 . 它允许我们将可调用对象(函数,函数指针,Lambda表达式等) 包装成一个对象, 使得我们可以像操作其他对象一样操作和传递可调用对象

std::function是C++引入的标准库和组件,它位于 <functional>头文件中,  它主要作用就是将可调用对象封装成一个函数对象,提供一种统一的方式来处理各种类型的可调用对象

#include <functional>

std::function的基本语法如下

std::function<返回类型(参数类型1,参数类型2,....)>func;

1. 封装函数

#include <iostream>
#include <functional>

void greet()
{
   std::cout << "Hello, Beijing!" << std::end1;
}

int main()
{
    std::function<void()> func = greet;
   func();  //调用封装的函数
   return 0;
}

 

2. 封装Lambda表达式

#include <iostream>
#include <functional>

int main()
{
     std::function<void()> func = [](){
           std::cout << "Lambda function test!" << std::end1;
      };

      func(); //调用封装的lambda表达式
     return 0;
}

 

3. 封装可调用对象 (仿函数)

#include <iostream>
#include <functional>

class Greet
{
    public:
        void operator()() const{
            std::cout << "functor test!" << std::end1;
        }
};

int main()
{
     std::function<void()> func = Greet();
     func(); //调用封装的仿函数
     return 0;
}

 

看完上面这几个例子,我们来了解一下std::function的实现原理

 std::function通常使用类型擦除和小对象优化(Small Object Optimization, SOO) 来实现

 

标签:std,function,调用,封装,C++,func,include
From: https://www.cnblogs.com/wphl-27/p/18582158

相关文章

  • QT C++ 解决调试运行时报 The inferior stopped 错误
    (1)报错信息和报错时调用堆栈SignaIReceived-QtCreatorTheinferiorstoppedbecauseitreceivedasignalfromtheoperatingsystem.Signalname:SIGSEGVSignalmeaning:Segmentationfault报错时调用堆栈停留在voidMyTableView::setModel()函数的该行:报错时调用堆栈......
  • 【C++】程序流程控制(下)
    4.2.3  for循环语句作用:满足循环条件,执行循环条件语法:for(起始表达式;条件表达式;末尾循环体){循环语句;} 示例://用for循环打印数字0-9代码://用for循环打印数字0-9#include<iostream>usingnamespacestd;intmain(){   //打印数字0-9   for(inti......
  • 利用 Function 接口告别冗余(屎山)代码
    前言在Java开发的征途中,我们时常与重复代码不期而遇。这些重复代码不仅让项目显得笨重,更增加了维护成本。幸运的是,Java8带来了函数式编程的春风,以Function接口为代表的一系列新特性,为我们提供了破除这一难题的利剑。本文将以一个实际应用场景为例,即使用Java8的函数式编程......
  • C++三级抽测题目(答案+题目)2
    今天我给大家出一套C++三级考题限时3小时,大家加油!!!题目1:求一个两位数的个位和十位的和说明从键盘读入一个两位的整数n,请求出这个两位整数个位和十位的和是多少?输入格式一个两位的整数n。输出格式一个整数,代表n个位和十位的和。样例输入数据124输出数据16......
  • Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌
    一、前言首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟,命令交互的时间占用,不同硬件之间的主频偏差等,肯定会有些许的误差,只要......
  • 使用Function与BiConsumer动态获取与操作对象中的属性
    代码:packagecom.xxx.xxx.utils;importcom.alibaba.fastjson.JSON;importlombok.Data;importjava.util.function.BiConsumer;importjava.util.function.Function;/***函数测试*/publicclassTest{@DatapublicstaticclassTestObj{pri......
  • OpenCV图像处理——图像滤波原理与代码实现(C++/Python)
    概述本节主要总结常见的图像噪声,以及降噪的方法。1.图像噪声图像噪声是指图像中不需要的、随机出现的像素值变化,这些变化可能是由于传感器误差、传输误差、环境干扰等因素引起的。图像噪声会降低图像质量,影响图像处理和分析的结果。1.1高斯噪声高斯噪声,也称为白噪声......
  • Linux C/C++编程之静态库
    【图书推荐】《LinuxC与C++一线开发实践(第2版)》_linuxc与c++一线开发实践pdf-CSDN博客《LinuxC与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要书评试读】-京东图书(jd.com)10.3.1 静态库的基本概念静态库文件的后缀为.a,在Linux下一般命名为libxxx.a。当......
  • Linux C/C++编程之动态库
    【图书推荐】《LinuxC与C++一线开发实践(第2版)》_linuxc与c++一线开发实践pdf-CSDN博客《LinuxC与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要书评试读】-京东图书(jd.com)10.4.1 动态库的基本概念动态库又称为共享库。这种类型的库的命名规则一般是libx......
  • 百度的面试官,你什么勾八水平,也好意思上车锁门 面试官:说一下C++强制类型转换,C++内存管
    ......