广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中的boost::function库简介
  • 834
分享到

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

2024-04-02 19:04:59 834人浏览 薄情痞子
摘要

boost::function Boost.Function库用来提供一个对象化的函数指针,通过它可以很容易的将一个函数封装为仿函数。 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等,也是一些比较有用的函数,功能很简单,这里就不多介绍了。

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

--结束END--

本文标题: C++中的boost::function库简介

本文链接: https://www.lsjlt.com/news/151672.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中的boost::function库简介
    boost::function Boost.Function库用来提供一个对象化的函数指针,通过它可以很容易的将一个函数封装为仿函数。 boost::function库可以支持自由函...
    99+
    2022-11-13
  • C++ Boost MultiArray简化使用多维数组库
    目录一、介绍Boost.MultiArray二、示例一、介绍Boost.MultiArray Boost.MultiArray Boost.MultiArray 是一个简化使用多维数...
    99+
    2022-11-13
    C++ Boost MultiArray C++ Boost MultiArray库 C++ 多维数组简化
  • C++中Boost的转换函数
    Boost的转换函数是对C++中的四种类型转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)的一些补充和扩展,在阅读...
    99+
    2022-11-13
  • C++中的atoi 函数简介
    目录一.atoi 函数二.atoi 函数函数实战 一.atoi 函数 在 stdlib.h 中 atoi 函数,可用于将 char 字符串转为 int 整数类型, 语法如下: ...
    99+
    2022-11-12
  • C++中Boost的智能指针scoped_ptr
    boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用: #includ...
    99+
    2022-11-13
  • C++中Boost的智能指针shared_ptr
    boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shar...
    99+
    2022-11-13
  • C++中Boost的智能指针weak_ptr
    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下: #include <string> #includ...
    99+
    2022-11-13
  • C++11中bind绑定器和function函数对象介绍
    目录一. bind1st和bind2nd1.C++ STL中的绑定器2.bind1st和bind2nd的底层原理实现二. 模板的完全特例化和非完全特例化三. function函数对象...
    99+
    2022-11-13
  • C# 枚举的使用简介
    目录为什么使用枚举?枚举有哪些用法?1、简单枚举2、标志枚举3、枚举使用的一些建议枚举这个名词大家都听过,很多小伙伴也使用过, 那么枚举在开发中能做什么,使用它后能给程序代码带来什么...
    99+
    2022-11-11
  • C#线程的简单介绍
    本篇内容介绍了“C#线程的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#线程是什么呢?在操作系统中一个进程至少要包含一个线程,然...
    99+
    2023-06-17
  • Android中的SQLite数据库简介
    SQLite简介: SQLite是Android系统采用的一种开源的轻量级的关系型的数据库,Android中允许每个应用程序都拥有自己独立的数据库,每个应用程序的数据库的位置一...
    99+
    2022-06-06
    sqlite数据库 SQLite Android
  • Objective-C中NSNumber与NSDictionary的用法简介
    NSNumber的常用方法 在Objective-c中有int的数据类型,那为什么还要使用数字对象NSNumber?这是因为很多类(如NSArray)都要求使用对象,而int不是对象...
    99+
    2022-05-17
    Objective-C
  • 简单了解JavaScript中的new Function
    目录前言1、语法01).无效的 JSON 对象字符串合法化02).模板字符串作为模板前言 JavaScript技术一直处于不断发展壮大中,如果你是前端开发人员或者JavaScript...
    99+
    2022-11-13
  • Python的numpy库ndarray简介
    目录 前言 一、ndarray产生方法 1. np.array() 2.np.arrage() 3.np.linspace() 二、ndarray的属性 总结 前言 numpy库可以用来处理矩阵相关的数学运算,相比于Pyth...
    99+
    2023-09-15
    python numpy 开发语言
  • C++中Boost的智能指针scoped_ptr怎么使用
    本篇内容主要讲解“C++中Boost的智能指针scoped_ptr怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中Boost的智能指针scoped_ptr怎么使用”吧!boost:...
    99+
    2023-07-02
  • python Polars库的使用简介
    目录文件地址:大家好,我是小F~ 很多人在学习数据分析的时候,肯定都会用到Pandas这个库,非常的实用! 从创建数据到读取各种格式的文件(text、csv、json),或者对数据进...
    99+
    2022-11-12
  • C++中map和set的简介及使用详解
    目录关联式容器键值对setset的介绍set的使用multisetmapmap的介绍map的使用map构造map的插入map的[ ]运算符重载multiset关联式容器 关联式容器包...
    99+
    2022-11-13
  • C++中function的实现原理详解
    目录前言自己实现function前言 类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操...
    99+
    2022-12-09
    C++ function实现原理 C++ function原理 C++ function
  • C#读取XML文件的简单介绍
    这篇文章主要讲解了“C#读取XML文件的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#读取XML文件的简单介绍”吧!C#读取XML文件:编译NO2.cs后,执行将产生"...
    99+
    2023-06-17
  • Redis数据库的简单介绍
    这篇文章给大家分享的是有关Redis数据库的简单介绍的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1.Redis数据库介绍redis数据库是一种基于内存可持久化的键值对非关系性数...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作