C++ boost库开发教程
文章平均质量分 81
boost零基础教程,先介绍windows环境boost库的下载,编译,VS2017开发环境配置等,然后介绍各种容器数组,多线程,xml文件解析、asio、websocket等技术,纯干货,提供全部源码。
余额抵扣
助学金抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《PyQt PySide6零基础入门与项目实战》、《OBS源码分析与桌面录制视频教程》。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ Boost.Test 数据驱动测试与装饰器:从入门到进阶
本文系统讲解 Boost.Test 的高级特性:数据驱动测试(Data-Driven Test)、装饰器(Decorator)、Fixture 体系与链接方式。所有 API 均对照 Boost 官方文档核实,可直接编译运行。原创 2026-08-06 10:30:00 · 18 阅读 · 0 评论 -
C++ Boost.Beast 自定义 Body:零拷贝与流式处理
本文深入 Boost.Beast 的 Body 体系,讲解 BodyReader/BodyWriter 概念要求,实现一个自定义 Body,并详解 `http::buffer_body` 的零拷贝流式用法。所有 API 均对照 Beast 官方文档与头文件源码核实。这是 Boost.Beat 系列的最难一篇,涉及 Beast 的核心扩展机制。原创 2026-08-06 00:00:00 · 31 阅读 · 0 评论 -
C++ Boost.Beast WebSocket 服务端开发:握手、读写与控制帧
本文基于 Boost.Beast 实现 WebSocket 服务端和客户端,讲解 stream 声明、握手流程、消息读写、binary/text 模式、ping/pong/close 控制帧、超时设置。所有 API 均对照 Beast 官方文档与头文件核实。原创 2026-08-05 08:45:00 · 439 阅读 · 0 评论 -
C++ Boost.Beast HTTP Client 与大文件下载:请求构造与流式响应
本文基于 Boost.Beast 实现一个 HTTP 客户端,讲解请求构造、域名解析、连接、读写流程,以及大文件下载的流式处理。所有 API 均对照 Beast 官方文档核实,代码取自官方示例并整理。上篇讲解了 HTTP Server,本文聚焦 Client 端。原创 2026-08-05 08:30:00 · 47 阅读 · 0 评论 -
C++ boost库教程(一):boost简介
C++ boost零基础教程原创 2019-05-03 20:43:31 · 51159 阅读 · 0 评论 -
C++ boost库开发环境配置
最近有小伙伴看了我的教程,被C++ boost开发环境的配置难住了,我在写博客时觉得C++程序员应该对SDK的配置很熟悉,就没着重介绍,本篇详细介绍VS2017 C++ boost开发环境的配置,其它库的配置也类似。 像boost, ffmpeg, opencv, SDL, halcon等,这些SDK, 一般都是包含以下三种文件(1)头文件 .h或.hpp, 用hpp做后缀的,是把声明和实现放一起了;(2)静态库 .lib文件;(3)动态库.dll文件,该类文...原创 2020-07-05 22:30:16 · 2364 阅读 · 4 评论 -
C++ boost库教程(二):boost数值转换
在STL中有一些列的字符转换函数,例如atoi(), itoa()等,在boost里面只需用一个函数lexical_cast进行转换,lexical_cast是模板方法,使用时需要传入类型。 使用方法: (1)包含头文件 #include <boost/lexical_cast.hpp> (2)命名空间 u...原创 2019-05-04 14:47:07 · 3076 阅读 · 1 评论 -
C++ boost库教程(三):boost字符串处理
boost库也提供了和STL一样的字符串处理方法,不过比STL更加丰富,使用boost的字符串处理方法,需要包含头文件: #include <boost/algorithm/string.hpp> using namespace boost;boost库有很多以“i”开头,"_copy"结尾的函数方法,简述如下: (1...原创 2019-05-05 10:59:18 · 4136 阅读 · 0 评论 -
C++ boost库教程(四):windows下编译boost库
前面介绍的一些boost库功能,都是boost的基础功能,boost还有很多功能需要编译后才能使用。例如Chrono, Context, FileSystem, Regex(正则表达式),Thread等。编译boost库很简单,步骤如下:(1)在cmd窗口下,cd到boost的目录,例如的目录如下:(2)执行批处理脚本 bootstrap.bat, 完成后会在当前目...原创 2019-05-05 22:09:28 · 2581 阅读 · 1 评论 -
boost ubuntu编译指南
boost下载与解压boost库版本页面https://www.boost.org/users/download/当前的版本是1.75.0,下载链接https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz本篇教程用deepin系统演示,在ubuntu下类似,命令完全一样。先在桌面创建一个文件夹,例如boost_code, 进入boost_code, 用wget命令下载,如下图wget https://dl原创 2021-04-17 01:02:47 · 840 阅读 · 0 评论 -
ubuntu boost运行./bootstrap.sh后出现Failed to build B2 build engine
ubuntu boost运行./bootstrap.sh后可能会出现如下提示Building B2 engine…A C++11 capable compiler is required for building the B2 engine.Toolset ‘cxx’ does not appear to support C++11.Note, the C++11 capable compiler is only required for building the B2engine. The B2原创 2021-04-17 00:08:17 · 4960 阅读 · 4 评论 -
C++ cmake脚本链接Boost库
有些C++项目可能需要用到CMake,本篇博客介绍如何在cmake脚本里链接boost库。来打印看看具体的Boost_LIBRARIES是哪些,其实就是上面find_package里写的。然后使用find_package引用当前项目需要用到的boost模块,在最后链接时,需要链接。在上面的脚本中,关于BOOST_ROOT 的路径,可以参考我之前的博库cmake编译方法。如果是动态链接,那么运行的时候就需要把相应的dll放到exe目录,否则会提示缺少dll。, 在cmake生成项目时,可以用。原创 2023-11-29 09:24:06 · 1128 阅读 · 0 评论 -
C++ boost库教程(五):boost日期时间类的用法
boost为开发者提供了日期时间相关的类,例如date, date_duration, ptime等,为C++的日期时间编程提供了极大的便利。要是用boost日期时间类,需要编译boost, 具体方法参考上一篇博客【boost的编译方法】。 调用方法:包含头文件, 名字空间,lib库(各个版本的lib名字不同)#include <boost/date_...原创 2019-05-09 13:14:27 · 2331 阅读 · 3 评论 -
C++ boost库教程(六):boost timer类实现程序计时
timer 类 boost的timer类可以计算时间的流逝,可以用来测量程序的运行时间,算法的执行时间等,提供毫秒级别的时间精度,最大的时间间隔是596小时. timer类位于boost命名空间下,需要包含头文件,如下:#include <boost/timer.hpp>using namespace boost;示例代码:例如计算...原创 2019-05-19 01:00:17 · 1583 阅读 · 0 评论 -
C++ boost库教程(七):boost数组array
boost数组arrayboost有自己的数组,性能比普通数组差一点,使用时包含头文件#include<boost/array.hpp> boost::array的部分源码如下 template<class T, std::size_t N> class array { public: T elems[N]; ...原创 2019-05-19 01:02:07 · 2755 阅读 · 0 评论 -
C++ boost库教程(八):散列容器,双向映射容器,环形缓冲区
boost散列容器 散列容器(hash container)是一种非常重要的容器类型,它内部使用hash算列表代替二叉树提供跟高的访问效率,散列容器是无序的。 boost提供的set,map与STL的set/map用法基本相同,单查找的平均复杂度友O(logN)变成了O(1),查找性能更好。unordered_set unordered_set...原创 2019-05-19 23:11:39 · 1685 阅读 · 1 评论 -
C++ boost库教程(九):boost for循环
boost for循环提供了两个宏: 正向迭代 BOOST_FOREACH, 逆向迭代 BOOST_REVERSE_FOREACH使用时需要包含头文件 #include <boost/foreach.hpp>基本操作和C++ 11的 for类似,...原创 2019-05-25 19:41:13 · 1826 阅读 · 0 评论 -
C++ boost库教程(十):boost 多维动态数组multi_array
C++在创建数组时必须制定除第一维外的维数,例如 :arr[m][n]; /*表示m行n列,如果不指定第二个参数,就无法指定列数,例如arr[3][a] = {1,2,3,4,5,6,7}那么该二维数组的排列方式有多种,如果指定第二列 arr[][3], 那么只有一种排列结果:1 2 34 5 67*/ 例如在VS中创建二维数组:...原创 2019-05-25 21:11:23 · 2206 阅读 · 0 评论 -
C++ boost库教程(十一):boost库读写ini
假设有如下配置文件 Net.ini[netinfo]ip=192.168.1.2port=1234boost库提供了读写ini的方法,namespace ini_parser{ template<class Ptree> void read_ini(std::basic_istream<typename Ptree::key_type::v...原创 2020-01-06 21:10:41 · 2004 阅读 · 0 评论 -
C++ boost库教程(十二):boost解析xml文件
xml文件,作为应用程序的配置文件很常见,功能也比ini文件丰富,对于xml文件的读写,有很多方法,之前我主要使用libxml, tinyxml这两个库,操作方法稍微有点复杂,对比使用boost的xml操作,boost相对简单。 boost库的property_tree保存了多个属性值得树形结构,可以解析xml, json, ini等文件。 下面介...原创 2020-01-06 22:00:57 · 2723 阅读 · 0 评论 -
C++ boost库教程(十三):boost解析json数据
什么是json格式 json是JavaScript Object Notation的简写,一种轻量级数据交换格式,经常用于web项目,前后台数据交换,数据格式比较简单,格式是压缩的,占用带宽小 ,便于服务器解析。JSON 语法规则 (1)数据在名称值对中 (2)数据由逗号分隔 (3)花括号保存对象 (4)方括号保存数组...原创 2020-01-07 23:06:45 · 4131 阅读 · 0 评论 -
C++ boost库教程(十四):boost多线程
关于多线程,各个系统,框架都有自己的实现,例如 windows: CreateThread MFC: AfxBeginThread Qt : QThread boost库是跨平台的,如果使用boost的多线程,在不同平台之间就无需修改代码,这一点还是看各人的喜好,有些人不一定喜欢用boost...原创 2020-01-07 23:34:24 · 2231 阅读 · 0 评论 -
C++ boost库教程(十五):boost线程同步之mutex
卖火车票应该是最经典的多线程demo, 多窗口,票不重复,不能出现负数票,本篇博客用卖火车票来模拟多线程同步。 互斥量(mutex)是一种用于线程同步的手段,它可以在多线程环境里防止多个线程同时操作共享资源.一旦一个线程锁住了互斥量,那么其他钱程必须等待它解锁互斥量后才能再访问共享资源. Qt有QMutex, MFC有CMutex, BOOST库也有自己的mutex,...原创 2020-01-12 19:18:38 · 2269 阅读 · 0 评论 -
C++ boost库教程(十六):boost线程timed_mutex
上篇博客介绍了boost库的mutex, 这次介绍timed_mutex的使用。 timed_mutex比mutex多增加了两个功能,尝试加锁,持续加锁。try_lock_for 如果timed_mutex为上锁,则将它上锁,并返回1,如果已经上锁,则阻塞rel_time时间,并返回0. 代码如下:#include "pch.h"#inclu...原创 2020-01-12 20:13:30 · 1285 阅读 · 0 评论 -
C++ boost库教程(十七):boost并发编程之原子操作atomic
早期的C++中没有语言级别的并发支持,因为在C++诞生很久以后线程等用于并发操作的概念才出现(POSIX线程标准制定于1995年)。随着近年来多CPU、多内核计算机的大量出现,并发操作(不仅是多线程)已经成为了软件开发的基本需求,新的C++标准提供了〈atomic〉、〈thread〉等库,对并发编程提供了初步的支持,但仍未达到尽善尽美。 作为C++标准库的补充,Boo...原创 2020-01-14 01:07:55 · 1949 阅读 · 0 评论 -
C++ boost库教程(十八):boost log模块应用与分析
boost的日志库需要编译,如果经过第四篇的编译过程后,在lib目录会有如下库 boost的功能强大,包罗万象,有自己的log,可以不用第三方库,当然C++的第三方log库也很强大,例如衍生自java log4j的log4cxx、log4cpp、 log4cplus,谷歌google glog等,作为软件开发人员,熟练掌握一个log库很有必要,log对软件的调试运行分析很...原创 2020-01-19 23:25:20 · 2158 阅读 · 0 评论 -
C++ boost库智能指针(一):scoped_ptr 与 scoped_array
使用scoped_ptr需要包含的头文件#include <boost/scoped_ptr.hpp> 相比于auto_ptr, boost的scoped_ptr对指针的使用权进行转移,这是因为在scoped_ptr内部对拷贝,赋值做了私有化:template<class T> class scoped_ptr // noncopyable{private: T * px; scoped_ptr(scoped_ptr const &..原创 2020-06-22 23:18:19 · 962 阅读 · 0 评论 -
C++ boost库智能指针(二):shared_ptr和shared_array
shared_ptr是boost最重要的智能指针,最像智能指针的"智能指针",由于它的优越表现,被加入了C++11标准。 shared_ptr与scoped_ptr —样包装了 new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针,可以被自由地拷贝和赋值,在任意的地方共享它,和scoped_ptr、auto_ptr一样重载了“*”和“->”,用get()可以获取被管理的指针,也没有算术操作符,同样也不能管理数组内存,当没有代码使用(引用计数为0)它时...原创 2020-06-22 23:18:36 · 1299 阅读 · 0 评论 -
C++ boost库智能指针(三):weak_ptr
weak_ptr是shared_ptr得到协助者,可以观察shared_ptr是否过期,weak_ptr不改变引用计数,也不能使用 *,->操作符,是一个很弱的智能指针。例如下面的代码:#include <iostream>#include <boost/make_shared.hpp>#include <boost/weak_ptr.hpp>using namespace std;using namespace boost;cl...原创 2020-06-22 23:19:07 · 597 阅读 · 0 评论 -
C++ boost库智能指针(四):intrusive_ptr
intrusive_ptr这个智能指针不怎么好用,虽然它和shared_ptr也是基于引用计数的,但需要自己来实现引用计数的增加与减少。需要在我们管理的指针对象中添加一个计数的成员,例如下面的类Test. 头文件:#include <boost/intrusive_ptr.hpp>class Test{public: Test() { _iCount = 0; cout << "构造" << endl; } ~Test...原创 2020-06-23 00:08:37 · 1563 阅读 · 0 评论 -
c++ boost enable_shared_from_this原理分析与代码演示
enable_shared_from_this介绍 在使用boost库时,经常会遇到enable_shared_from_this,这个类有什么用呢,在c++ std里,也有这个类,先来看看std中关于enable_shared_from_this的解释: 派生自的对象enable_shared_from_this可以使用shared_from_this成员函数中的方法来创建与现有所有者共享所有权的实例的shared_ptr所有者。否则,如果使用this创建新的shared_ptr,则它与现有sha原创 2021-10-30 17:30:28 · 612 阅读 · 0 评论 -
C++ boost库教程之内存池
Boost Pool 库提供了一个内存池分配器,它是一个工具,用于管理在一个独立的、大的分配空间里的动 态内存。当你需要分配和回收许多不的对象或需要更高效的内存控制时,使用内存池是一个好的 解决方案。 Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点: (1) 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。 (2)告别...原创 2020-12-07 23:53:00 · 1282 阅读 · 0 评论 -
C++ boost ref 引用类型介绍
boost库提供了一种“强引用”类型,标准C++的引用类型,一旦指向类型,就不能改变它的值,boost的ref类型可以进行修改值,++等操作。 boost引用库是在ref.cpp文件的reference_wrapper内,使用前要包含图文件 #include<boost/ref.hpp> reference_wrapper很小,它是一个模板类,代码不多...原创 2020-07-06 23:28:04 · 1304 阅读 · 0 评论 -
c++ websocketpp简介与开发环境配置
websocket简介websocket是HTML5中新增的一个协议,这个协议的出现,让客户端和服务器之前的数据交互变成全双工的。websocket的出现,最主要的变化是允许服务器主动给客户端推送数据。这一大改变,就让websocket具有了以往其它协议无法比拟的实时通信能力。要实现websocket服务,需要客户端和服务端都得支持websocket协议才可以。目前看来,并没有太多标准性的框架来完成websocket服务。websocket能做什么聊天、多玩家游戏等C++ websocket的实现原创 2021-08-03 23:18:37 · 1490 阅读 · 1 评论 -
socket.io技术介绍与入门
什么是socket.ioSocket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5官网:https://socket.io/官方文档:https://socket.io/docs/v4socket.io特点实时分析:将数据推送到客户端,这些客原创 2021-08-22 18:44:06 · 2509 阅读 · 1 评论 -
boost::asio教程(一) :tcp server与tcp client
boost::asio是boost库的一个名字空间,包含了tcp,udp编程的一些类与方法,比如 如果你是第一次看这个,可能不太懂,不要紧,就把它当做是一些类就可以,什么socket,tcp,udp不用管。 在写网络编程,相信大部分人都了结七层网络协议,tcp三次握手四次挥手之类的,但是其中深层次的原理,却是晦涩难懂,但这并不影响我们写socket之类的代码,boost::asio则更加简化了网络编程的难度,例如写tcp时,你都不知道他是怎么监听端口的。 首先我们来看看常规的C++ tcp原创 2021-10-24 14:56:08 · 2770 阅读 · 0 评论 -
boost::asio教程(二) :异步tcp
如何理解同步,异步呢?用400米接力赛来说,前一个队员到达时,下一个队员才能继续往前跑,这种跑步方式可以理解为同步,一步步的进行;而百米赛跑,8个赛道,所有人同时跑,这种类似于异步。异步不需要等待,同步会阻塞主线程。 本专栏上一篇介绍了boost tcp server与client的实现方式,本篇介绍boost asio异步tcp的实现。先回忆boost::asio同步的实现方式 在学习boost::asio异步tcp之前,先看看上一篇关于同步tcp server与client的实现方式。a原创 2021-10-30 19:02:58 · 1478 阅读 · 0 评论 -
boost::asio教程(三) :boost udp编程
boost::asio教程(一) :tcp server与tcp client boost::asio教程(二) :异步tcp 前面两篇主要讲了boost asio tcp编程,这一节来介绍boost udp编程,先来看看udp用到的类和方法.ip::udp::socket 与tcp类似,在tcp时用到的socket是ip::tcp::socket,boost封装了底层socket的一些操作,用面向对象的方式进行编程。ip::udp::endpoint 在tcp时用到的是ip::tc原创 2021-11-03 22:28:59 · 3193 阅读 · 0 评论 -
C++ boost协程技术介绍
协程在C++20中已经加入了,但并不完善,C++标准库的协程将在C++23中正式推出。其它语言,例如go、python也是默认支持协程,C++相对来说落后了。 Boost在1.53版本就推出了协程库,本篇博客基于Boost1.76版本,来介绍协程库。1.53版本的BoostCoroutine 现在已被弃用,请使用Boost.Coroutine2。什么是协程 在谈协程之前,我们先谈谈函数,函数有入口地址,而且只有一个,返回也只有一个,而协程却可以多次进入,多次返回。 协程,英文名是称为Cor原创 2021-11-06 18:58:31 · 1728 阅读 · 0 评论 -
C++ boost非对称协程代码演示
boost的两种非对称协程:asymmetric_coroutine<>::push_typeasymmetric_coroutine<>::pull_type*pull_typeasymmetric_coroutine<>::pull_type从另一个执行上下文传输数据。模板参数定义了传输的参数类型。asymmetric_coroutine<>::pull_type的构造函数接受一个 函数 ( coroutine-function )作为参数接受原创 2021-11-06 19:01:24 · 649 阅读 · 1 评论
分享