c++11特性 std::function 简单实验

1.概要

std::function 是 C++11 引入的一个通用、多态的函数封装器。它可以存储、复制和调用任何 Callable 目标 —— 函数、Lambda 表达式、bind 表达式或其他函数对象。这使得 std::function 成为一个非常强大的工具,可以用来表示和操作一般的可调用对象。

2.代码

下面是一个简单的 std::function 实验,展示了如何使用它来存储不同类型的可调用对象,并调用它们:

#include <iostream>  
#include <functional> // 包含 std::function 的头文件  
  
// 一个简单的函数  
int add(int a, int b) {  
    return a + b;  
}  
  
// 一个函数对象(也称为仿函数)  
struct Multiply {  
    int operator()(int a, int b) const {  
        return a * b;  
    }  
};  
  
int main() {  
    // 使用 std::function 存储一个普通函数  
    std::function<int(int, int)> func1 = add;  
    int result1 = func1(3, 4); // 调用 func1,相当于调用 add(3, 4)  
    std::cout << "Result 1: " << result1 << std::endl; // 输出: Result 1: 7  
  
    // 使用 std::function 存储一个 Lambda 表达式  
    std::function<int(int, int)> func2 = [](int a, int b) { return a - b; };  
    int result2 = func2(7, 3); // 调用 func2,执行 Lambda 表达式  
    std::cout << "Result 2: " << result2 << std::endl; // 输出: Result 2: 4  
  
    // 使用 std::function 存储一个函数对象  
    std::function<int(int, int)> func3 = Multiply();  
    int result3 = func3(5, 6); // 调用 func3,相当于调用 Multiply()(5, 6)  
    std::cout << "Result 3: " << result3 << std::endl; // 输出: Result 3: 30  
  
    // std::function 也可以接受没有参数的 Callable 对象  
    std::function<void()> func4 = []() { std::cout << "Hello, std::function!" << std::endl; };  
    func4(); // 调用 func4,输出 "Hello, std::function!"  
  
    return 0;  
}

3.运行结果

Result 1: 7
Result 2: 4
Result 3: 30
Hello, std::function!

4.代码说明

在这个例子中,我们定义了三个不同类型的可调用对象:一个普通的函数 add,一个函数对象 Multiply,以及一个 Lambda 表达式。我们创建了三个 std::function 对象 func1、func2 和 func3,分别用于存储这些可调用对象。然后,我们通过调用这些 std::function 对象来执行相应的操作,并打印结果。

5.补充说明

最后,我们还展示了如何使用 std::function 存储一个不接受任何参数的可调用对象(在这种情况下是一个 Lambda 表达式),并通过调用它来执行操作。

std::function 的强大之处在于它的多态性:你可以使用相同的 std::function 对象来存储不同类型的可调用对象,并在需要时调用它们。这使得代码更加灵活和可重用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/576101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换&#xff1a; HTML&#xff1a; <!--底部导航--> <ul class"milliaNav"> <li class"active"><a href"#"> <svg class"icon" viewBox"0 0 1024 1024&qu…

随手记:树结构翻页和定位指定数据逻辑

业务背景&#xff1a; 树形组件展示数据&#xff0c;数据包含过去数据&#xff0c;现在数据&#xff0c;未来数据&#xff0c;用户在首次进入页面时&#xff0c;展示的是当天的数据&#xff0c;如果当天没有数据&#xff0c;则显示最近一条的过去数据。数据按照时间越长数据会…

【AMBA Bus ACE 总线 5 -- Non-cached master】

文章目录 Non-cached masterNon-cached master 图 1-1 Non-cached master 意思就是,比如对于master0,它想写的时候,就直接发起transaction,它不是对自己的local cache进行操作,比如以non-shareable write 为例,master0在写的时候分别在AW,和 W channel发起命令和数据,见…

CV | 360BEV: Panoramic Semantic Mapping for Indoor Bird‘s-Eye View理解

本文主要是对于论文360BEV的解读和实现。 Paper:2023.03_360BEV: Panoramic Semantic Mapping for Indoor Birds-Eye View 360BEV&#xff1a;室内鸟瞰全景语义映射 arxiv.org/pdf/2303.11910 Code:jamycheung/360BEV: Repository of 360BEV (github.com) Demo:360BEV (jamyche…

win11 修改hosts提示无权限

win11下hosts的文件路径 C:\Windows\System32\drivers\etc>hosts修改文件后提示无权限。 我做了好几个尝试&#xff0c;都没个啥用~比如&#xff1a;右键 管理员身份运行&#xff0c;在其他版本的windows上可行&#xff0c;但是win11不行&#xff0c;我用的是微软账号登录的…

Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)

在Android的组件Activity中&#xff0c;有这样一对方法: onSaveInstanceeState 和 onRestoreInstanceState 这两对方法&#xff0c;可以让我在Activiy被异常销毁时&#xff0c;保存状态&#xff1b;以及在Activity重建时&#xff0c;恢复状态。 比如&#xff1a;当我们在输入…

就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式

3、LVS/DR 模式 实验说明&#xff1a; 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

SpringCloud简介

微服务架构理论 微服务架构概述 Spring Cloud简介Spring Cloud 技术栈SpringBoot和SpringCloud的关系SpringCloud和Dubbo区别对比相关文档 微服务架构概述 微服务是一种架构模式&#xff0c;将单一应用程序划分成一组小的服务&#xff0c;服务之间相互协调、相互配合&#xff0…

OSPF的LSA与特殊区域

Area区域概念 *一个区域维护一张LSDB&#xff0c;路由器详细的链路信息只在这个区域内传播 不是每一台路由器都需要了解所有外部目的地的详细信息 *OSPF网络的层次化设计 通过区域ID标识 骨干&#xff08; Backbone &#xff09;区域&#xff0c;必须是area 0(骨干区域…

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq&#xff0c;一个是存储&…

kubernetes部署控制器Deployment

一、概念 在学习rc和rs控制器资源时&#xff0c;这两个资源都是控制pod的副本数量的&#xff0c;但是&#xff0c;他们两个有个缺点&#xff0c;就是在部署新版本pod或者回滚代码的时候&#xff0c;需要先apply资源清单&#xff0c;然后再删除现有pod&#xff0c;通过资源控制&…

接口测试和Mock学习路线(上)

一、接口测试和Mock学习路线-第一阶段&#xff1a; 掌握接口测试的知识体系与学习路线掌握面试常见知识点之 HTTP 协议掌握常用接口测试工具 Postman掌握常用抓包工具 Charles 与 Fiddler结合知名产品实现 mock 测试与接口测试实战练习 1.接口协议&#xff1a; 需要先了解 O…

Vue3 + Element-Plus 对接高德地图实现搜索提示选址、点击地图选址、自我定位功能(最新)

Vue3 Element-Plus 对接高德地图实现搜索提示选址、点击地图选址、自我定位功能&#xff08;最新&#xff09; 1、效果展示2、实现代码2.1 GaoDeMap.vue2.2 SystemDialog.vue2.3 UnusedList.vue.vue 1、效果展示 2、实现代码 2.1 GaoDeMap.vue <template><div style…

【个人博客搭建】(11)swagger添加jwt信息

这个主要是为了方便使用swagger时&#xff0c;能更好的带入我们的token。 ps&#xff1a;如果使用其他第三方api工具&#xff08;apipost、postman等&#xff09;则不需要。 &#xff08;当然&#xff0c;不用不能没有&#xff0c;是吧&#xff09; 1、在AddSwaggerGen内添加…

文件权限管理

文件权限管理 1. 权限对象 权限对象含义u属主&#xff0c;所有者g属组o其他人 2. 权限类型 权限类型含义值r读权限4w写权限2x执行权限1 3. 修改文件属主及属组 命令:chown(change own)更改文件或目录属主与属组名 3.1 修改文件属主与属组 只修改属主&#xff1a;chown $…

【数据结构】链表的中间节点

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 Definition for singly-linked list.struct ListNode {int val;struct ListNode *next;};typedef struct ListNode ListNode; struct ListNode…

美国服务器vs香港服务器,哪个网站部署打开更快一些?

网站打开速度受多种因素影响&#xff0c;包括服务器地理位置、网络质量、带宽等。用户距离服务器越近&#xff0c;访问速度越快。对于中国大陆用户而言&#xff0c;香港的服务器可能会提供更快的网站访问体验&#xff0c;因为香港距离大陆较近&#xff0c;且网络连接通常较好。…

python高阶函数:zip()

概述与基本用法 zip() 是 Python 内置函数之一&#xff0c;用于将多个可迭代对象打包成一个元组序列&#xff0c;然后返回一个迭代器。它可以接受任意数量的可迭代对象作为参数&#xff0c;并将它们的元素按顺序一一对应地打包成元组。 以下是 zip() 函数的基本用法&#xff…

2024年视频号小店来了,这次是不是新的电商风口?

大家好&#xff0c;我是电商糖果 2024年电商行业可以说大地震了&#xff0c;为什么这么说呢&#xff1f; 因为一个非常有实力的新平台出现了。 它就是微信视频号推出的视频号小店&#xff0c;也可以理解为腾讯旗下的电商平台。 视频号的出现是腾讯为了对标抖音&#xff0c;和…

使用LSTM网络实现文本情感分析

一、实验目的&#xff1a; 理解循环神经网络的基本概念和原理&#xff1b;了解循环神经网络处理文本数据的基本方法&#xff1b;掌握循环神经网络处理文本数据的实践方法&#xff0c;并实现文本情感分析任务。 实验要求&#xff1a; 使用Keras框架定义并训练循环神经网络模型…
最新文章