当前位置: 首页 > article >正文

c++ 包装器

        在c++ 中如果我们要实现一个整数比大小的功能有三种方法

  • 函数
  • 函数指针
  • 仿函数
bool fun(int a, int b) {
    return a > b;
}

class Fun_class {
public:
    bool operator()(int a, int b) {
        return a > b;
    }
};

int main() {
    bool(*fun_ptr)(int, int) = fun;
    Fun_class fun_class;
    cout << fun(3, 5) << endl;              // 函数
    cout << fun_ptr(3, 5) << endl;          // 函数指针
    cout << fun_class(3, 5)<<endl;          // 仿函数

    system("pause");
    return 0;
}

这三种方法实现功能相同但是由于本身类型不同所以不能相互赋值传参,很多时候为了统一类型会浪费大量的时间,这时候就体现出包装器的重要性了

头文件    #include<functional>

语法    function<返回值类型(参数类型,用逗号隔开)> f = .....;

函数,函数指针,仿函数都可给包装器赋值

#include<functional>


bool fun(int a, int b) {
    return a > b;
}

class Fun_class {
public:
    bool operator()(int a, int b) {
        return a > b;
    }
};

void ff(function<bool(int, int)> f);
int main() {
    bool(*fun_ptr)(int, int) = fun;
    Fun_class fun_class;
    cout << fun(3, 5) << endl;              // 函数
    cout << fun_ptr(3, 5) << endl;          // 函数指针
    cout << fun_class(3, 5)<<endl;          // 仿函数
    function<bool(int, int)> m1 = fun;
    function<bool(int, int)> m2 = fun_ptr;
    function<bool(int, int)> m3 = fun_class;
    ff(fun);
    ff(fun_ptr);
    ff(fun_class);

    system("pause");
    return 0;
}

总的来说,包装器用于统一函数,函数指针,仿函数,使之相互之间可以赋值,调用,进而使代码逻辑更为通畅

感谢观看!


http://www.kler.cn/a/303926.html

相关文章:

  • 软件测试面试大全(含答案+文档)
  • 前端:块级元素和行内元素
  • Linux 常用操作指令大揭秘(下)
  • 学术论文写作丨机器学习与深度学习
  • macOS解决U盘装完系统容量变小的问题
  • vue2或vue3的name属性有什么作用?
  • Git常用命令(记录)
  • 【Android笔记】Android Studio打包 提示Invalid keystore format
  • Cesium 获取BBOX
  • SprinBoot+Vue网络商城海鲜市场的设计与实现
  • uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等
  • 【区块链通用服务平台及组件】微言科技数据智能中台
  • [网络]TCP/IP五层协议之应用层,传输层(1)
  • okhttp 报java.lang.IllegalStateException: closed
  • 为什么矩阵特征值之和等于主对角线元素之和,特征值乘积等于行列式值
  • 对话世优科技CEO纪智辉:AI模型让数字人发展按下加速键
  • 基于STM32的汽车仪表显示系统:集成CAN、UART与I2C总线设计流程
  • 【RAG】RAG再进化?基于长期记忆的检索增强生成新范式-MemoRAG
  • 盘古信息IMS 驱动智能工厂建设,助力制造企业降本增效
  • 力扣第79题 单词搜索
  • SprinBoot+Vue门诊管理系统的设计与实现
  • OceanBase 企业版OMS 4.2.3的使用
  • C语言 | Leetcode C语言题解之第391题完美矩形
  • MySQL:两阶段提交
  • [论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale
  • 27. 什么是MyBatis的动态代理机制?如何生成Mapper接口的实现类?