C++中的包装器是一种设计模式,用于将一个复杂或底层的接口进行封装,以便提供一个更简洁、易用的接口。包装器可以包装任何类型的可调用实体,如函数,成员函数,函数指针,仿函数对象,lambda表达式等。
包装器在资源管理、接口封装、类型安全等方面有广泛应用。
在实际编程中,包装器可以用于回调机制、事件处理、异步编程等场景。它们提供了灵活的函数调用机制,使得代码更加模块化和可重用。
综上所述,C++包装器是提升代码可读性、可维护性和性能的有力工具。通过使用标准库(<functional>头文件)中提供的包装器类,开发者可以更方便地处理各种可调用对象。
在C++标准库中,std::function是一个模板类,它用作一个通用的函数包装器,能够存储、复制和调用任何可调用的目标。
2.1 包装非成员函数
在对可调用对象进行包装的时候,需要在类型参数列表中指定可调用对象的返回值和参数列表:
可以认为是编译器对包装器做的特殊处理吧。
2.2 成员函数
与普通函数不同的是,不能直接使用成员函数的函数名来进行包装,必须对其进行取地址(&)。
注意:(1) 访问成员函数要指定类域;(2) 普通成员函数的参数列表中有隐含的this指针。
2.3 逆波兰表达式求值. - 力扣(LeetCode)
在学习function之前,我们可以使用switch语句来建立运算符与运算逻辑之间的关系:
在学习function之后,我们可以使用map来建立二者的关系:
之前无法使用这样的方式来做的原因是:各个lambda表达式(或其他可调用对象)的类型不一样,导致这些lambda表达式无法放到同一个map中进行管理。
可以说,function包装器的一大作用就是可以将返回值和参数列表相同的一类可调用对象的类型统一起来,方便传参或存储。
std::bind也是C++标准库中的一个包装器,它的主要作用是将一个可调用对象的参数进行调整,生成并返回一个新的可调用对象。
std::bind的主要作用有两个:
(1)指定某个参数的值并绑定到新的可调用对象。
(2)调整参数的顺序。
Args是一个占位符列表,用于在绑定时指定传递给可调用对象的参数。
这些占位符可以是实际的参数值,也可以是std::placeholders命名空间中定义的占位符,如std::placeholders::_1、std::placeholders::_2等,它们在后续的调用中会被实际传递的参数所替代。
3.1 调整参数顺序
利用std::placeholders命名空间中定义的占位符,我们可以对参数的顺序进行调整。
_1、_2、...、_n分别代表原函数中的第1个参数、第2个参数、...、第n个参数。
在bind的参数列表中按我们需要的顺序给出这些占位符,就可以实现参数顺序的调整:
3.2 绑定参数
当占位符是实际的参数值时,对应位置的参数的值会被绑定为该实际值:
注意:某参数被绑定之后,占位符的对应关系中不再考虑该参数,而是对剩下的参数依次编号为_1、_2、...、_n-1,多个参数被绑定时同理。
到此这篇max232程序(max233cpp功能)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/54709.html