boost

您所在的位置:网站首页 苹果手机支持360手机助手吗 boost

boost

2023-08-04 12:33| 来源: 网络整理| 查看: 265

目录

一、简单使用

1.存储普通函数

 2.存储成员函数

二、与bind/lambda结合使用

1.与bind结合使用

(1)存储普通函数

(2) 存储成员函数

2.与lambda结合使用

三、结合ref库使用

1.不使用ref库存储函数对象

2.使用ref库存储函数对象

四、function用于回调

1.回调函数是普通函数

2.回调函数是静态成员函数

3.回调函数是普通成员函数

4.回调函数是函数对象

五、与auto对比

六、与C++标准库对比

        function是⼀个函数对象的“容器”,在概念上它像是C++中函数指针类型的泛化,是⼀种“智能函 数指针”。它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调 ⽤对象。因此它可以被⽤于回调机制,暂时保管函数或函数对象,在之后需要的时机再调⽤这些 函数或函数对象,使回调机制拥有更多的弹性。

        与原始的函数指针相⽐,function对象的体积要稍微⼤⼀点(3个指针的⼤⼩),速度要稍微慢⼀ 点(10%左右的性能差距),但这些缺点与它带给程序的巨⼤好处相⽐微不⾜道。

        同bind⼀样,function也不是⼀个单独的类,⽽是⼀个⼤的类家族。function可以容纳0到10个参 数的函数,所以它有多个类,其命名分别是function0到function10。但我们通常不直接使⽤它 们,⽽是使⽤⼀个更通⽤的function类。

一、简单使用

        function只需要⼀个模板参数,这个参数就是将要容纳的函数类型,尖括号中的类型声明就是⼀个没有函数名的函数原型。如果我们已经知道将要容纳的函数,那么也可以⽤关键字decltype来直接获取函数类型。

        function的构造函数可以接收任意符合模板中声明的函数类型的可调⽤对象,如函数指针和函数对象,或者是另⼀个function对象的引⽤,之后在内部存储⼀份它的拷⻉。 ⽆参的构造函数或传⼊空指针构造将创建⼀个空的function对象,不持有任何可调⽤物,调⽤空的function对象将抛出 bad_function_call异常,因此在使⽤function前最好检测⼀下它的有效性。

        empty( ):可以⽤来测试 function是否为空,或者⽤重载操作符operator!来测试function是否为空,function对象也可以 在⼀个bool语境中直接测试它是否为空。

        clear( ):可以直接将function对象置空,它与直接赋值0具有同样的效果。

        模板成员函数target( ):可以返回function对象内部持有的可调⽤物Functor的指针,如果 function为空则返回空指针nullptr。

        contains( ):可以检测function是否持有⼀个Functor对象。

        operator( ):它把传⼊的参数转交给内部保存的可调⽤物,完成真正的函数调⽤。

        function还重载了⽐较操作符operator==和operator!=,可以与被包装的函数或函数对象进⾏⽐较。如果function存储的是函数对象,那么要求函数对象必须重载operator==,它才是可⽐较的。 两个function对象不能使⽤==和!=直接进⾏⽐较。因为function存在bool的隐式转换,function 定义了两个function对象的operator==,但没有实现,企图⽐较两个function对象会导致编译错误。

1.存储普通函数 #include //普通函数 int sum(int a, float b) { float sum = a + b; std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3