boost库命名规则的优点
Boost库概览

Boost库概览1.Boost库概览1.1. 按字母序1.1.1.Any⽤于存储不同类型的值的安全的泛型容器。
作者Kevlin Henney第⼀次发布 1.23.0标准构建和连接仅头⽂件1.1.2.Array与STL兼容的常量⼤⼩的数组的容器包装类。
作者Nicolai Josuttis第⼀次发布 1.17.0标准TR1构建和连接仅头⽂件1.1.3.Asio可移植的⽹络库,包括Socket、计时器、域名解析和Socket流。
作者Chris Kohlhoff第⼀次发布 1.35.0标准构建和连接仅头⽂件1.1.4.Assign⾮常⽅便地使⽤常数或者⽣成数据填充容器。
作者Thorsten Ottosen第⼀次发布 1.32.0标准构建和连接仅头⽂件1.1.5.Bimap双向map库;使⽤Boost.Bimap,你可以创建两个类型都可作为键值的关联容器。
作者Matias Capeletto第⼀次发布 1.35.0构建和连接仅头⽂件1.1.6.Bindboost::bind是标准函数std::bind1st和std::bind2nd的泛化。
它⽀持任意函数对象、函数、函数指针和成员函数指针,也能够⽤于绑定任何参数到⼀个特定的值或者路由输⼊参数到任意位置。
作者Peter Dimov第⼀次发布 1.25.0标准TR1构建和连接仅头⽂件1.1.7.CRCBoost CRC库提供了CRC(循环冗余校验码)计算对象的两个实现和CRC计算函数的两个实现。
实现是基于模板的。
作者Daryle Walker第⼀次发布 1.22.0标准构建和连接仅头⽂件1.1.8.Call Traits为参数传递定义了类型。
作者John Maddock, Howard Hinnant等第⼀次发布 1.13.0标准构建和连接仅头⽂件1.1.9.Circular Buffer⼀个STL兼容的容器,也被⼴泛称为环缓冲区或者循环缓冲区。
作者Jan Gaspar第⼀次发布 1.35.0标准构建和连接仅头⽂件/doc/a40a611755*********ef715.html patibility帮助⾮标准兼容的库。
C “准”标准库BOOST简介

C++“准”标准库Boost简介标准C++的当前版本发布于1998,它为传统的面向过程编程、面向对象编程和泛型编程提供了坚实的支持。
正如旧C++(1998之前的)独力承担了把面向对象普及到日常的软件开发中一样,C++98在为泛型编程做着同样的事情。
九十年代中期标准模板库(STL)与标准C++的集成已经引起了另一次编程范式的转变,就象八十年代的时候Bjarne Stroustrup把类引入到C一样。
现在大多数的C++开发者都熟悉STL的概念,这再次提升了整体的水平。
C++能力的应用仍旧被不断发现。
今天许多的C++库,包括特殊的数学库,都大量利用了模板元编译的技术,它是设计C++模板的时候没有预测到的幸运结果。
随着C++社区里的高级工具和技术不断涌现,开发复杂应用软件正变得更简单、更令人愉快。
很难描述Boost对于C++世界的重要性。
自从C++98发布后,除了ISO的标准C++委员会,没有一个团体对于C++的发展方向有比Boost更大的影响(许多Boost的成员本身就是WG21的重要成员,包括它的创始人,我的朋友Beman Dawes)。
成千上万个杰出的Boost志愿者无私地,以对等审查方式开发了许多C++98没有提供的很有用的库。
这些库中的十个已被接受将加入到即将到来的C++0x的库中,更多的库正被考虑接受。
Where a library approach has been shown to be wanting,the wisdom gained from the cross-pollination of Boost and WG21 has suggested a few modest language enhancements,which are now being entertained.你不太可能没有听说过Boost,我来问一下你…你需要在文本和数字之间进行转换,或在任意的可流处理的类之间进行转换?没有问题,用Boost.lexical_cast。
Boost库是什么?C++ Boost的详细资料简介

Boost库是什么?C++ Boost的详细资料简介boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。
不过对比STL,boost更加实用。
STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。
boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。
有一些库是跨类别包含的,就是既属于这个类别又属于那个类别。
在文本处理部分,conversion/lexcial_cast类用于“用C++++”的方法实现数字类型和字符串之间的转换。
主要是替代C标准库中的atoi、itoa之类的函数。
当然其中一个最大的好处就是支持泛型了。
format库提供了对流的“printf-like”功能。
printf里使用%d、%s等等的参数做替换的方法在很多情况下还是非常方便的,STL的iostream则缺乏这样的功能。
format为stream增加了这个功能,并且功能比原始的printf更强。
regex,这个不多说了,正则表达式库。
如果需要做字符串分析的人就会理解正则表达式有多么有用了。
spirit,这个是做LL分析的框架,可以根据EBNF规则对文件进行分析。
(不要告诉我不知道什么是EBNF)。
做编译器的可能会用到。
一般人不太用的到。
tokenizer库。
我以前经常在CSDN上看到有人问怎么把一个字符串按逗号分割成字符串数组。
也许有些人很羡慕VB的split函数。
现在,boost的tokenizer也有相同的功能了,如果我没记错的话,这个tokenizer还支持正则表达式,是不是很爽?array: 提供了常量大小的数组的一个包装,喜欢用数组但是苦恼数组定位、确定数组大小等功能的人这下开心了。
[转]boost::any的用法、优点和缺点以及源代码分析
![[转]boost::any的用法、优点和缺点以及源代码分析](https://img.taocdn.com/s3/m/c1b34c5f777f5acfa1c7aa00b52acfc789eb9fe6.png)
[转]boost::any的⽤法、优点和缺点以及源代码分析boost::any⽤法⽰例:#include <iostream>#include <list>#include <boost/any.hpp>typedef std::list<boost::any> list_any;//关键部分:可以存放任意类型的对象void fill_list(list_any& la){la.push_back(10);//存放常数la.push_back( std::string("dyunze") );//存放字符串对象;注意la.push_back(“dyunze”)错误,因为会被当错字符串数组}//根据类型进⾏显⽰void show_list(list_any& la){list_any::iterator it;boost::any anyone;for( it = la.begin(); it != la.end(); it++ ){anyone = *it;if( anyone.type() == typeid(int) )std::cout<<boost::any_cast<int>(*it)<<std::endl;else if( anyone.type() == typeid(std::string) )std::cout<<boost::any_cast<std::string>(*it).c_str()<<std::endl;}}int main(){list_any la;fill_list(la);show_list(la);return0;}boost::any的优点:对设计模式理解的朋友都会知道合成模式。
因为多态只有在使⽤指针或引⽤的情况下才能显现,所以std容器中只能存放指针或引⽤(但实际上只能存放指针,⽆法存放引⽤,这个好像是c++的不⾜吧)。
C++ boost库总结

第1章Boost程序库总论1.使用Boost,将大大增强C++的功能和表现力第2章时间与日期1.timer提供毫秒级的计时精度,内部是通过std::clock取时间的2.progress_timer自动打印某生命周期的执行时间3.原则上程序库的代码是不应该被用户修改的4.progress_display可以在控制台上显示程序的执行进度5.date_time库能很好的表示日期时间概念,并能和C的时间结构tm进行友好互转6.date类提供年月日和星期几的概念。
data可通过from_string或from_undelimited_string从字符串解析而来,可通过to_simple_string、to_iso_string、to_extended_iso_string转换为字符串。
(精度到天的DateTime)7.day_clock是精度到天的时钟8.date_duration表示的是天精度的时间间隔概念,别名为days,另外还有years、months、weeks9.date_period表示两个date之间的日期区间(精度到天的TimeSpan)10.date_iterator、week_iterator、month_iterator和year_iterator是时间的迭代器11.boost::greorian::gregorian_calendar中有实用静态方法:is_leap_year、end_of_month_day12.time_duration表示微妙或纳秒级的时间概念,几个实用子类:hours、minutes、seconds、millisec/milliseconds、microsec/microseconds、nanosec/nannoseconds13.duration_from_string可以从字符串解析time_duration14.ptime用来表示时间点,相当于date和time_duration的组合。
boost的用法和搭配

boost的用法和搭配
在C++中,Boost是一个非常流行的开源库,它提供了许多强大的、高效的工具和组件,可以帮助程序员更轻松地编写高质量的代码。
下面是Boost常用的用法和搭配:
1. 智能指针
Boost提供了多种类型的智能指针,如shared_ptr、scoped_ptr 和weak_ptr等。
这些指针可以帮助程序员更好地管理内存,避免内
存泄漏和野指针等问题。
2. 字符串处理
Boost还提供了许多用于字符串处理的组件,如regex、
token_iterator和lexical_cast等。
这些组件可以帮助程序员更方便地进行字符串匹配、分割、转换等操作。
3. 容器和算法
Boost提供了许多高效的容器和算法,如multi_index、
circular_buffer和graph等。
这些容器和算法可以帮助程序员更快地完成数据结构和算法相关的任务。
4. 时间和日期处理
Boost还提供了一些用于时间和日期处理的组件,如posix_time、gregorian和date_time等。
这些组件可以帮助程序员更方便地进行日期格式化、时间计算等操作。
5. 多线程和并发编程
Boost还提供了一些用于多线程和并发编程的组件,如thread、
mutex和condition_variable等。
这些组件可以帮助程序员更好地控制并发访问和线程同步等问题。
总之,Boost是一个非常强大的开源库,它提供了许多有用的工具和组件,可以帮助程序员更轻松地编写高质量的代码。
程序员可以根据自己的需要选择适合自己的组件和使用方法。
boost的编译使用

boost的编译使用Boost是一个C++库,提供了许多功能,用于增强C++编程体验。
它包含了许多模块,每个模块都提供了不同的功能,可以根据需要进行选择和使用。
Boost库在C++社区中非常受欢迎,被广泛地应用于各种项目中。
Boost提供了许多用于处理字符串的工具。
它的字符串算法模块包含了各种常用的字符串操作函数,如字符串查找、替换、拆分等。
使用Boost的字符串算法,我们可以更加方便地处理字符串,提高代码的效率和可读性。
Boost还提供了丰富的数据结构和算法库。
比如,Boost.Graph模块提供了图论算法的实现,可以用于解决各种图相关的问题。
Boost.Container模块提供了各种容器类的实现,例如vector、list、set等,可以方便地管理数据。
Boost.Algorithm模块提供了各种常用算法的实现,如排序、查找、计数等,可以大大简化代码的编写。
Boost还提供了许多用于多线程编程的工具。
Boost.Thread模块提供了线程的封装,可以方便地创建和管理线程。
Boost.Asio模块提供了异步网络编程的支持,可以处理网络通信中的各种问题。
使用Boost的多线程工具,我们可以更加方便地实现并发编程,充分发挥多核处理器的性能。
除了上述功能外,Boost还提供了许多其他模块,如日期时间处理、正则表达式、序列化等。
这些模块都是经过精心设计和实现的,可以大大提高C++编程的效率和质量。
Boost是一个非常强大的C++库,提供了丰富的功能和工具,可以帮助我们更加方便地进行C++编程。
无论是处理字符串、实现算法,还是进行多线程编程,Boost都可以提供强大的支持。
通过学习和使用Boost,我们可以提高代码的效率和可读性,让C++编程变得更加轻松和愉快。
boost常用库的使用介绍第一讲

boost常用库的使用介绍第一讲[object Object]Boost是一个C++库集合,包含了许多常用的工具和组件,用于增强C++的功能和性能。
Boost库广泛应用于各种领域,如网络编程、多线程、数据结构、算法等。
Boost库的使用可以大大简化C++开发过程,提高开发效率。
下面是一些常用的Boost库和它们的使用介绍:1. Boost.Filesystem:用于处理文件和目录的库。
它提供了一组易于使用和跨平台的API,可以进行文件和目录的创建、删除、移动、复制等操作。
2. Boost.Regex:正则表达式库,提供了强大的正则表达式功能,可以进行字符串匹配、替换等操作。
Boost.Regex支持多种正则表达式语法,包括Perl、ECMAScript等。
3. Boost.Thread:多线程库,提供了线程的创建、同步、互斥等功能。
Boost.Thread可以简化多线程编程,提高程序的并发性能。
4. Boost.Asio:网络编程库,提供了异步网络编程的功能。
它支持TCP、UDP、SSL等协议,可以用于开发高性能的网络应用程序。
5. Boost.SmartPtr:智能指针库,提供了shared_ptr、weak_ptr等智能指针类,用于管理动态分配的内存。
使用智能指针可以避免内存泄漏和悬挂指针等问题。
6. Boost.Algorithm:算法库,提供了一系列常用的算法,如排序、查找、字符串处理等。
Boost.Algorithm可以方便地进行各种数据处理操作。
7. Boost.Date_Time:日期和时间库,提供了日期和时间的表示、计算和格式化等功能。
它支持多种日期和时间表示方式,如Gregorian、Julian等。
8. Boost.Serialization:序列化库,用于将对象转换成字节流或从字节流中恢复对象。
Boost.Serialization可以方便地进行对象的序列化和反序列化操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
boost库命名规则的优点
作者:朱金灿
来源:/clever101
我们编译出来的二进制库文件该如何命名呢?当我经验尚浅时,发现这个不
是问题——就以工程名来命名呗。
但慢慢发现这种命名是有很多问题的(特别是当你升级编译器时,比如从VS 2005升级到VS2010时,或者是软件打包时):比如debug版本和release版本的库区分不开,不同版本的编译器编出的库区分不开(很多时候面对一个库你不知道它是VC6.0、VS 2005还是VS 2008编出来的),静态
库还是导入库区分不开,代码库的版本不知道……可能你会说:不是有个depends
工具,用它打开查看一下就知道了。
问题一是假如库文件很多时,谁愿意一一去查看;二是静态库还是导入库靠depends工具是判断不出来的。
而在开发时混用不同版本的库文件,会造成很多莫名其妙的问题。
如何解决这个问题?唯有靠规范的命名。
怎样才算是规范的库文件命名?我觉得指导原则应该是见名知意。
如果根据见名知意这个原则来衡量,我发现boost库
是做得比较规范的。
关于boost库的命名规则,具体请见这篇文章:Boost 库命名
规则(翻译)。
boost库的命名,涵括了下面几方面信息:
1.库的功能信息(即是序列化库、正则库还是其它功能的库)
2.静态库还是导入库(静态库以lib开头)
3.构建该库的具体编译器信息
4.线程标签(是多线程还是单线程)
5.影响库与其它编译代码的互操作性的细节的编码(debug版本还是release版
本,是否使用了STLPORT)
6.boost库的版本信息
面对这样规范的命名,你还会混用吗?据此我也简单制定了一个Windows环境下的库文件的命名规则:
静态库命名:lib+工程名_编译器信息_版本信息_互操作性细节信息.lib,
这里的互操作性细节信息初步分为debug版本、release版本以及多字节版本和unicode版本。
一个简单例子就是libpng_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png静态库,是debug版本(.lib前面用一个d来区分),库版本为V 1.3,采用多字节字符集编译。
(对应的release版本命名为libpng_vc80_1_3.lib)。
如果是unicode版本,名称则是libpng_vc80_1_3_ud.lib和libpng_vc80_1_3_u.lib (多了一个字母u)。
导入库:工程名_编译器信息_版本信息_互操作性细节信息.lib,这里的互操作性细节信息初步分为debug版本还是release版本,一个简单例子就是
png_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png导入库,库版本为V 1.3。
(对应的release版本命名为png_vc80_1_3.lib)。
如果是unicode版本,名称则是png_vc80_1_3_ud.lib和png_vc80_1_3_u.lib (多了一个字母u)。
动态库命名与导入库一样,不过是后缀名改为dll。
之所以不加线程信息,是因为我们现在开发的基本是多线程程序,所以默认构建多线程库。
线程信息就没必要加了。