网游平台开发中需要使用C++编程,为了有效的利用现有的,成熟的类库,准备对boost库大致浏览一遍,同时将一些心得,记录在blog上。
String and text processing:
1. conversion/lexical_cast
lexical_cast类用于字面值的转换,其原型为:
template<typename Target, typename Source>
Target lexical_cast(Source arg)
lexical_cast要求Target支持>>操作,Source支持<<操作,依赖于对stringstream的<<与>>操作完成转换。相对于CRT (C Run-Time Library)中的atoi, atol, atof, lexical_cast支持的数据类型转换更灵活,但运行效率没有进行测试,需要测试后确定是否保留对atoi等的使用。
无法完成转换时,lexical_cast抛出bad_lexical_cast异常,bad_lexical_cast派生自std::bad_cast
2. format
format类用于C++中替代printf like的格式化输出,并且format类是类型安全的。c++中,通过manipulator也可以实现一部分简单的格式化,但是十分有限。
format类在构造时需要指定一个format string,如下:
format f("%1 + %2 = %3")
%1代表第一个格式化参数,如果想显示%,那需要用%%来代替。格式化参数并不需要按顺序添加,而且同一个格式化参数也不限于只出现在一处,比如format string可以是"%3 %1 %2 %1"
format类重载了operator %,比如前面构造的f,可以使用 f % 10 % 20 % 30; 或者 f %10; f % 20; f % 30; 接下来可以使用 << 操作符将 f 输出,或者是 string s = f.str();
format支持更为复杂的格式化需求,格式为: %[N$][flags][width][.precision]type-char,比如: %3$0#6x
format类提供了两个方法用于异常处理,分别是:
unsigned char exceptions(unsigned char newexcept); // query and set exceptions you care
unsigned char exceptions() const; // just query
exception中可以指定以下的位:
boost::io::bad_format_string_bit, boost::io::too_few_args_bit, boost::io::too_many_args_bit, boost::io::out_of_range_bit
另外, boost::io::all_error_bits和boost::io::no_error_bits为别为两个方便全设或清空所有error bit的值。
3. regex
regex类就不多记了,需要的时候用就是了,关键是regular expression的语法要记熟。
4. spirit
spirit类是 EBNF语法的LL解析器,估计这次不会用到。
5. tokenizer
tokenizer是代替CRT中的strtok方法的,并且功能更加强大。tokenizer还提供了interator,方便与其他库的配合应用。
tokenizer的原型为:
template <
class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string
>
boost库中提供了四个预定义的separator: char_separator, escaped_list_separator, offset_separator和char_delimiters_separator,其中最后一个最boost的文档标注为 deprecated
6. string_algo
与前面的几个类不同,string_algo是一组类的总称,相当于一个sub library了。其位置在boost/algorithm/string目录下,包含的主要内容如下:
- case_conv.hpp: 大小写转换,包含 to_lower_copy, to_lower, to_upper_copy, to_upper
- classification.hpp: 字符类别,包含 is_classified(std::ctype_base::mask, locale), is_space, is_alnum, is_upper, is_xdigit等方法
- cllection_traits.hpp: 一大堆traits类,用于统一char的各种集合类,比如 STL collections, c-style array, null-terminated c-strings等的编程接口。
- compare.hpp: 字符串字符的functor,提供了is_equal, is_iequal两个predicates.
- concept.hpp: concept定义,包含FinderConcept和FormatterConcept
- constants.hpp: 定义了一个enum token_compress_mode_type
- erase.hpp: 提供了一组从string中移除字符和子串的方法,什么样的都有。
- find.hpp: 提供了一组从string中寻找子串的方法,允许指定各种寻找子串的条作。
- finder.hpp: 定义了一组生成string finder的方法
- formatter.hpp: 定义了一组生成string formatter的方法
- predicate.hpp: 提供了一组predictate, 包含starts_with, ends_withs, contains等
- replace.hpp: 提供了一组从string中替换子串的方法
- split:hpp: 提供了一组分割子串的方法。
- trim.hpp: trim算法。
分享到:
相关推荐
《Boost图形库:用户指南和参考手册》是一本专为C++图形编程设计的权威指南,该书属于“C++ In-Depth”系列丛书,由Jeremy Siek、Lie-Quan Lee以及Andrew Lumsdaine共同编著。Boost图形库是Boost库的一部分,它是一...
1. Boost Graph Library(BGL)是一个为C++语言设计的图论库。这个库提供了一系列的数据结构和算法,专门用于图的表示和处理。图是一种数据结构,它由节点(也称为顶点)和连接这些节点的边组成,常用于建模网络、...
std::string data = "Hello, world!"; boost::asio::write(serial, boost::asio::buffer(data)); ``` 4. **异步操作**: 异步操作允许程序在等待数据时继续执行其他任务。以下是一个简单的异步读取示例: ```...
《Boost Graph Library: 用户指南与参考手册》是由Jeremy G. Siek、Lie-Quan Lee、Andrew Lumsdaine共同撰写的一本关于Boost Graph Library(BGL)的权威指南。Boost Graph Library是Boost库中的一个C++图形处理库,...
Boost库是C++编程语言的一个开源库集合,包含了大量的实用工具和库,旨在提升C++的标准库功能。在本案例中,我们关注的是Boost库的1.68版本,该版本已在Windows环境下使用Visual Studio 2017进行编译,并生成了用于...
boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。
在C++编程中,STL(Standard Template Library)的string类是用于处理文本字符串的强大工具。然而,在处理二进制数据时,需要注意string类的一些特性,因为它通常与文本字符串关联,而二进制数据可能包含特殊的字符...
根据提供的文件信息,我们可以深入探讨Boost Graph Library (BGL)的相关知识点。这是一份详尽的用户指南和参考手册,由Jeremy G. Siek、Lie-Quan Lee和Andrew Lumsdaine共同编著,旨在为程序员提供一个全面了解BGL的...
Beyond the C++ Standard Library: An Introduction to Boost
在iOS开发中,Boost.Asio库是一个非常重要的工具,它为C++程序员提供了网络编程、异步I/O操作和时间管理的强大支持。本项目“xcode iOS 使用 boost::asio 的 demo”旨在展示如何在iOS应用中集成并使用Boost.Asio库。...
boost::lexical_cast用法示例,包含数值转字串,字串转数值以及相应的异常处理代码
Beyond the C++ Standard Library : An Introduction to Boost (Chinese)
使用c++实现boost::any类 any类可以存放任意类型数据,如: void test_any() { any any_a1(123); int a2 = any_cast(any_a1); int* p_a2 = any_cast(&any_a1); std::cout *p_a2="*p_a2<<std::endl; any any_b1...
在IT行业中,Boost库是一个非常重要的C++工具集,它为C++标准库提供了许多扩展功能,涵盖了诸如并发、文件系统、智能指针、正则表达式等多个领域。而SSL(Secure Sockets Layer)和其后续版本TLS(Transport Layer ...
boost library 安装程序 , 这个版本是1-47的 ,软件本身不大 , 但是需要在线下载文档,里面有许多有趣的东东,例如智能指针, 正则表达式等等!!
在“C++ 17:string_view转换为整数类型”这一主题中,我们主要探讨如何使用Boost Spirit Qi库将`string_view`对象转换为整数类型。 Boost Spirit Qi是Boost库的一部分,它是一个强大的解析库,允许程序员用C++编写...
标题“Boost-C++库_1.42(中文版)”表明本文档是一份关于Boost C++库1.42版本的中文文档。文档中会详细介绍Boost库的各个方面,而由于文件内容的不完整性和OCR扫描的限制,部分内容可能存在字句识别错误。尽管如此,...
2. **类型支持**:Boost.Serialization支持多种数据类型,包括基本类型(如int、float、string)、容器(如std::vector、std::map)、智能指针、自定义类对象等。通过继承`boost::serialize`并重载`save`和`load`...
《Beyond The C++ Standard Library - An Introduction To Boost (2005)》是关于C++编程领域的一个重要参考资料,特别是对于那些希望深入了解和利用Boost库的开发者来说。Boost是一个开源的C++库集合,它提供了许多...