函数对象笔记

embedded/2024/11/8 18:50:21/

函数对象

C++中的函数对象就是C语言中的函数指针

函数指针

指向一个函数的指针,可以动态调用不同的函数。

#include <iostream>// 一个普通的函数
void hello() {std::cout << "Hello, World!" << std::endl;
}
int add(int a, int b) {return a + b;
}
int main() {// 声明一个函数指针void (*func_ptr)() = hello;  // func_ptr 指向 hello 函数func_ptr();  // 调用 hello 函数// 声明一个函数指针,指向返回 int 类型的函数int (*add_ptr)(int, int) = add;std::cout << "Sum: " << add_ptr(3, 4) << std::endl;  // 调用 add 函数return 0;
}

函数指针的劣势

  • 代码中使用C++中的模板,调用使用函数指针调用函数。

  • 将函数指针传入compare时,编译器并不知道函数是什么。所以不能进行内联,导致会有函数的调用开销

bool mygreater(int a, int b)
{return a > b;
}
bool myless(int a, int b)
{return a < b;
}
template<typename T, typename Com>
bool compare(T a, T b, Com com)
{return com(a, b);
}int main()
{cout << compare(1, 2, mygreater) << endl;;cout << compare(1, 2, myless) << endl;;
}

函数对象(仿函数

重载了operator()的对象,可以如同函数一样被调用。

#include <iostream>// 定义一个仿函数类
class Adder {
publicint operator()(int a, int b) {return a + b ;}
};int main() {Adder add;  // 创建一个 Adder 对象,并初始化值为 10std::cout << "Sum: " << add(3, 4) << std::endl;  // 调用 operator(),输出 17 (3 + 4 + 10)return 0;
}

函数对象的优势

  • 传入函数的是一个对象,编译器知道函数是什么,因此可以进行内联,提高函数调用效率
template<typename T>
class mygreater {
public:bool operator()(T a, T b) { // 二元函数对象return a > b;}
};template<typename T>
class myless {
public:bool operator()(T a, T b) { // 二元函数对象return a < b;}
};
template<typename T, typename Com>
bool compare(T a, T b, Com com)
{return com(a, b);
}int main()
{cout << compare(1, 2, mygreater<int>()) << endl;;cout << compare(1, 2, myless<int>()) << endl;;
}

http://www.ppmy.cn/embedded/135960.html

相关文章

以梧桐数据库为例讲解如何计算用户连续登录比率

一、背景说明 在这个竞争激烈的市场环境中&#xff0c;移动运营商不仅需要吸引新客户&#xff0c;还需要关注如何提高客户的留存率。保持客户持续使用套餐、提升客户粘性是衡量服务质量、客户满意度以及营销策略效果的重要指标。因此&#xff0c;分析客户首次办理套餐后的持续…

你使用过哪些MySQL中复杂且使用不频繁的函数?

在MySQL中&#xff0c;除了常用的SELECT、INSERT、UPDATE等基本操作外&#xff0c;还有许多复杂且功能强大的函数&#xff0c;它们能够处理各种复杂的数据处理需求。这些函数虽然在日常开发中可能不常使用&#xff0c;但在特定场景下却能够发挥巨大的作用。下面&#xff0c;我将…

PHP弱类型安全问题

PHP弱类型安全问题主要源于PHP语言的弱类型特性&#xff0c;这种特性允许变量在不同类型之间自由转换&#xff0c;并在比较时进行自动的类型转换。以下是对PHP弱类型安全问题的简述&#xff1a; 一、弱类型特性 在PHP中&#xff0c;变量不需要事先声明类型&#xff0c;且可以…

网购选择困难症怎么破?别忘了你的这位“帮手”

每年双十一对不少人来说&#xff0c;既是购物剁手狂欢节&#xff0c;也是货比三家纠结得不行的选择困难症复发期。而现在&#xff0c;Pura 70 能够帮助我们解决不够了解商品、选择困难症等问题啦。 小艺圈选&#xff0c;圈出你感兴趣的商品&#xff0c;快速货比三家 利用指关…

2024年三个月自学手册 网络安全(黑客技术)

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、…

伦敦金价格是交易所公布的吗?

今年以来&#xff0c;伦敦金价格波动可谓是波澜壮阔&#xff0c;盘中屡次刷新历史新高&#xff0c;目前已经冲上了2700的历史大关。面对高歌猛进的伦敦金价格&#xff0c;投资者除了进行交易之外&#xff0c;还有一点相关方面的知识是想了解的。例如&#xff0c;伦敦金价格是交…

Redis 组网方式入门

文章目录 一、组网方式1. 单实例模式描述优点缺点适用场景 2. 主从复制模式&#xff08;Master-Slave Replication&#xff09;描述优点缺点适用场景基于docker的redis主从复制1. 配置主节点2. 配置从节点3. 查看节点状态4. 验证主从数据同步5. 查看同步进度 3. 哨兵模式&#…

11月3日笔记(根据凭据提权)

用户凭据操作 枚举 Unattended 凭据 无人值守(Unattended)安装允许应用程序在不需要管理员关注下自动安装。无人值守安装的问题是会在系统中残留一些配置文件&#xff0c;其中可能包含本地管理员的用户名和密码&#xff0c;常见的路径如下。 C:\sysprep.inf C:\syspreg\sysp…