C++中的boost::function库简介

 更新时间:2022年06月16日 10:26:33   作者:天方  
这篇文章介绍了C++中的boost::function库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

boost::function Boost.Function库用来提供一个对象化的函数指针,通过它可以很容易的将一个函数封装为仿函数。

boost::function库可以支持自由函数,函数对象,类成员函数。而且参数个数多达10个。boost::function库利用模板技术来实现。生成的代码有很高的运行效率。首先我们还是以一个例子简单的说明它的用法:

#include <iostream>
#include <boost/function.hpp>

using namespace std;

float add(int x,float y)
{
    return x + y;
}

int main()
{
    boost::function<float (int x, float y)> f = &add;
    cout<<"add(3,2) is "<<f(3,2)<<endl;
}

在上面的例子中,

定义了一个仿函数,它指向add函数。这个是一种比较容易理解的方式,也是boost推荐的写法,但有的编译器不支持(其实大多数主流编译器都支持)这种模板的语法,不支持的编译器包括:

  • Microsoft Visual C++ 6.0, 7.0

  • Borland C++ 5.5.1

  • Sun WorkShop 6 update 2 C++ 5.3

  • Metrowerks CodeWarrior 8.1

如果你用了上述编译器,则应使用boost::function2<float, int, float> f;的形式。

如果只是封装普通函数(功能类似函数指针),则使用方式和普通函数指针类似,可以直接通过"="来进行函数的封装,通过"()"来实现函数的调用。

如果用它来封装成员函数(用函数指针来指向成员函数用起来可不是一般的恶心),可以通过如下两种方式:

  • 通过boost::bind库实现。

  • 通过stl库std::bind1st和std::mem_fun 函数组合实现。

下面是一个简单的示例:

struct X
{
    bool foo(int a){ cout<<a<<endl; return false;}
};

int main()
{
    boost::function<bool (int)> f;
    X x;

    f = std::bind1st(
        std::mem_fun(&X::foo), &x);
    f(5);
    

    f = boost::bind(&X::foo, &x, _1);
    f(5);
}

boost::function对象还有一些成员函数,如contains、clear、empty等,也是一些比较有用的函数,功能很简单,这里就不多介绍了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言去除相邻重复字符函数的实现方法

    C语言去除相邻重复字符函数的实现方法

    这篇文章主要介绍了C语言去除相邻重复字符函数的实现方法的相关资料,实现去重字符串相邻重复的字符,不相邻的不用去重的功能,需要的朋友可以参考下
    2017-08-08
  • C语言实现三子棋(井字棋)算法

    C语言实现三子棋(井字棋)算法

    这篇文章主要为大家详细介绍了C语言实现三子棋(井字棋)算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++中智能指针如何设计和使用

    C++中智能指针如何设计和使用

    智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露,需要的朋友可以参考下
    2012-11-11
  • opencv3机器学习之EM算法示例详解

    opencv3机器学习之EM算法示例详解

    这篇文章主要介绍了opencv3机器学习之EM算法的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • C语言字符/字符串相关函数收藏大全

    C语言字符/字符串相关函数收藏大全

    这篇文章主要给大家介绍了关于C语言字符/字符串的相关函数,文中通过示例代码总结的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 浅谈MFC 改变控件大小和位置

    浅谈MFC 改变控件大小和位置

    在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。下面我们就来探讨下在MFC中如何改变控件大小和位置
    2015-06-06
  • C++结合OpenCV实现RRT算法(路径规划算法)

    C++结合OpenCV实现RRT算法(路径规划算法)

    这篇文章主要介绍了C++结合OpenCV实现RRT算法,RRT算法整体框架主要分为rand、near、new三点的建立和near与new之间的安全性检查,需要的朋友可以参考下
    2022-05-05
  • C++ EnterCriticalSection简单使用

    C++ EnterCriticalSection简单使用

    线程锁在多线程中可以控制线程的执行顺序,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 解析C语言结构体及位段

    解析C语言结构体及位段

    今天小编就为大家分享一篇关于解析C语言结构体及位段,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 浅谈Linux环境下并发编程中C语言fork()函数的使用

    浅谈Linux环境下并发编程中C语言fork()函数的使用

    fork函数在Linux中可以创建子进程即一个新的进程,这里我们根据实例来浅谈Linux环境下并发编程中C语言fork()函数的使用,需要的朋友可以参考下
    2016-06-06

最新评论