ptr_fun用于包装普通函数指针,mem_fun用于包装成员函数指针,二者均为早期STL适配器;2. 因语法繁琐且功能受限,自C++11起被lambda、std::function和std::bind取代;3. C++17中正式移除,现代代码应使用lambda或bind替代。
在C++标准库中,ptr_fun 和 mem_fun 是早期用于适配函数指针和成员函数指针的函数适配器,主要用于配合STL算法使用。随着语言的发展,它们逐渐被更现代、更灵活的机制取代。理解它们的区别以及为何被淘汰,有助于掌握C++函数对象演进的历史脉络。
ptr_fun 用于将普通函数指针转换为函数对象(functor),以便能被STL算法接受。某些老式STL实现要求函数对象具有特定的类型特征(如result_type),而裸函数指针不具备这些typedef,因此需要包装。
示例:假设有函数:bool is_even(int n) { return n % 2 == 0; }
在旧式代码中,要传递给std::not1等适配器时需包装:std::ptr_fun(is_even)
这会生成一个带类型定义的函数对象,支持绑定与取反操作。
mem_fun 专门用于包装类的成员函数指针,使其能通过对象指针调用。常用于std::for_each、std::transform等算法中对容器中对象指针调用成员函数。
对于类:class Task { public: void run(); };
容器
为std::vector时,可使用:std::for_each(tasks.begin(), tasks.end(), std::mem_fun(&Task::run));
它会自动解指针并调用成员函数。
C++还提供mem_fun_ref用于对象引用的场景,适用于存储实际对象而非指针的容器。
上述适配器在C++98/03时代是必要的,但存在明显缺陷:
mem_fun、mem_fun1等变体从C++11开始,以下现代机制全面替代了它们:
现代替代示例:
用lambda调用成员函数:std::for_each(tasks.begin(), tasks.end(), [](Task* t) { t->run(); });
或使用bind:std::for_each(tasks.begin(), tasks.end(), std::bind(&Task::run, std::placeholders::_1));
在C++17中,ptr_fun 和 mem_fun 已被正式移除。编译器虽可能仍支持出于兼容性考虑,但不应再使用。
基本上就这些。老式适配器是特定历史阶段的产物,理解它们有助于阅读旧代码,但在新项目中应优先使用lambda和std::bind。
# c++
# 区别
# typedef
# 标准库
# 封装
# 成员函数
# auto
# bool
# int
# void
# Lambda
# 指针
# class
# public
# function
# 对象
# transform
# 算法
# 绑定
# 移除
# 已被
# 但在
# 均为
# 适用于
# 使其
# 不支持
# 不应
# 而非
相关文章:
制作网站公司那家好,网络公司是做什么的?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何访问已购建站主机并解决登录问题?
企业微网站怎么做,公司网站和公众号有什么区别?
电商网站制作公司有哪些,1688网是什么意思?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
网站图片在线制作软件,怎么在图片上做链接?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何通过虚拟主机空间快速建站?
建站之星后台密码如何安全设置与找回?
实例解析Array和String方法
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
小程序网站制作需要准备什么资料,如何制作小程序?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何在景安服务器上快速搭建个人网站?
视频网站制作教程,怎么样制作优酷网的小视频?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何在阿里云购买域名并搭建网站?
建站之星后台密码遗忘?如何快速找回?
如何在西部数码注册域名并快速搭建网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
大连网站制作公司哪家好一点,大连买房网站哪个好?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
建站主机是什么?如何选择适合的建站主机?
音乐网站服务器如何优化API响应速度?
如何在企业微信快速生成手机电脑官网?
已有域名能否直接搭建网站?
如何快速打造个性化非模板自助建站?
开源网站制作软件,开源网站什么意思?
建站10G流量真的够用吗?如何应对访问高峰?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何快速搭建支持数据库操作的智能建站平台?
湖北网站制作公司有哪些,湖北清能集团官网?
临沂网站制作公司有哪些,临沂第四中学官网?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
代刷网站制作软件,别人代刷火车票靠谱吗?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
太原网站制作公司有哪些,网约车营运证查询官网?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何快速搭建高效可靠的建站解决方案?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
*请认真填写需求信息,我们会在24小时内与您取得联系。