文章分类 -  boost

摘要:16.1.概述C++标准定义了四种类型转换操作符:static_cast,dynamic_cast,const_cast和reinterpret_cast。 Boost.Conversion 和 Boost.NumericConversion 这两个库特别为某些类型转换定义了额外的类型转换操作符。16.2.Boost.ConversionBoost.Conversion库由两个文件组成。分别在boost/cast.hpp文件中定义了boost::polymorphic_cast和boost::polymorphic_downcast这两个类型转换操作符, 在boost/lexical_cast 阅读全文

posted @ 2012-02-23 18:50 无忧consume 阅读(378) 评论(0) 推荐(0) |

摘要:15.1.概述在执行时会有潜在失败可能的每个函数都需要一种合适的方式和它的调用者进行交互。 在C++中,这一步是通过返回值或抛出一个异常来完成的。 作为常识,返回值经常用在处理非错误的异常中。 调用者通过返回值作出相应的反馈。异常被通常用来标示出未预期的异常情况。 一个很好的例子是在错误的使用new时将抛出的一个动态内存分配异常类型std::bad_alloc。 由于内存的分配通常不会出现任何问题,如果总是检查返回值将会变得异常累赘。本章介绍了两种可以帮助开发者利用错误处理的Boost C++库:其中 Boost.System 可以由特定操作系统平台的错误代码转换出跨平台的错误代码。 借助于 阅读全文

posted @ 2012-02-23 18:49 无忧consume 阅读(653) 评论(0) 推荐(0) |

摘要:13.1.概述这一章将会介绍许多我们在 C++ 标准中已经很熟悉的容器的 Boost 版本。 在这一章里, 我们会对 Boost.Unordered 的用法有一定的了解 (这个容器已经在 TR1 里被加入到了 C++ 标准); 我们将会学习如何定义一个 Boost.MultiIndex; 我们还会了解何时应该使用 MuitiIndex 的一个特殊的扩展 —— Boost.Bimap。 接下来, 我们会向你介绍第一个容器 —— Boost.Array, 通过使用它, 你可以把 C++ 标准里普通的数组以容器的形式实现。13.2.Boost.Array库Boost.Array在boost/arra 阅读全文

posted @ 2012-02-23 18:48 无忧consume 阅读(540) 评论(0) 推荐(0) |

摘要:14.1.概述在 Boost C++ 库中, 把一些类型定义为container显得不太合适, 所以就并没有放在第13章容器里。 而把他们放在本章就比较合适了。 举例来说,boost::tuple就扩展了 C++ 的数据类型std::pair用以储存多个而不只是两个值。除了boost::tuple, 这一章还涵盖了类boost::any和boost::variant以储存那些不确定类型的值。 其中boost::any类型的变量使用起来就像弱类型语言中的变量一样灵活。 另一方面,boost::variant类型的变量可以储存一些预定义的数据类型, 就像我们用union时候一样。14.2.元组Bo 阅读全文

posted @ 2012-02-23 18:48 无忧consume 阅读(173) 评论(0) 推荐(0) |

摘要:11.1.概述Boost C++ 的序列化库允许将 C++ 应用程序中的对象转换为一个字节序列, 此序列可以被保存,并可在将来恢复对象的时候再次加载。 各种不同的数据格式,包括 XML,只要具有一定规则的数据格式,在序列化后都产生一个字节序列。所有 Boost.Serialization 支持的格式,在某些方面来说都是专有的。 比如 XML 格式不同用来和不是用 C++ Boost.Serialization 库开发的应用程序交换数据。所有以 XML 格式存储的数据适合于从之前存储的数据上恢复同一个 C++ 对象。 XML 格式的唯一优点是序列化的 C++ 对象容易理解,这是很有用的,比如说在 阅读全文

posted @ 2012-02-23 18:47 无忧consume 阅读(259) 评论(0) 推荐(0) |

摘要:12.1.概述词法分析器用于读取各种格式的数据,这些数据可以具有灵活但可能非常复杂的结构。 关于"格式"的一个最好的例子就是 C++ 代码。 编译器的词法分析器必须理解 C++ 的各种可能的语言结构组合,以将它们翻译为某种二进制形式。开发词法分析器的主要问题是所分析的数据的组成结构具有大量的规则。 例如,C++ 支持很多的语言结构,开发一个相应的词法分析器可能需要无数个if表达式来识别任意所能想象到的 C++ 代码是否有效。本章所介绍的Boost.Spirit库将词法分析器的开发放到了桌面上来。 无需将明确的规则转换为代码并使用无数的if表达式来验证代码,Boost.Spi 阅读全文

posted @ 2012-02-23 18:47 无忧consume 阅读(448) 评论(0) 推荐(0) |

摘要:10.1.概述库Boost.DateTime可用于处理时间数据,如历法日期和时间。 另外,Boost.DateTime 还提供了扩展来处理时区的问题,且支持历法日期和时间的格式化输入与输出。 本章将覆盖 Boost.DateTime 的各个部分。10.2.历法日期Boost.DateTime 只支持基于格里历的历法日期,这通常不成问题,因为这是最广泛使用的历法。 如果你与其它国家的某人有个会议,时间在2010年1月5日,你可以期望无需与对方确认这个日期是否基于格里历。格里历是教皇 Gregory XIII 在1582年颁发的。 严格来说,Boost.DateTime 支持由1400年至9999 阅读全文

posted @ 2012-02-23 18:47 无忧consume 阅读(468) 评论(0) 推荐(0) |

摘要:9.1.概述库Boost.Filesystem简化了处理文件和目录的工作。 它提供了一个名为boost::filesystem::path的类,可以对路径进行处理。 另外,还有多个函数用于创建目录或验证某个给定文件的有效性。9.2.路径boost::filesystem::path是 Boost.Filesystem 中的核心类,它表示路径的信息,并提供了处理路径的方法。实际上,boost::filesystem::path是boost::filesystem::basic_path<std::string>的一个typedef。 此外还有一个boost::filesystem:: 阅读全文

posted @ 2012-02-23 18:46 无忧consume 阅读(406) 评论(0) 推荐(0) |

摘要:7.1.概述本章介绍了 Boost C++ 库Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。异步任务的典型例子是网络应用。 如果数据被发送出去了,比如发送至 Internet,通常需要知道数据是否发送成功。 如果没有一个象 Boost.Asio 这样的库,就必须对函数的返回值进行求值。 但是,这样就要求待至所有数据 阅读全文

posted @ 2012-02-23 18:45 无忧consume 阅读(369) 评论(0) 推荐(0) |

摘要:8.1.概述进程间通讯描述的是同一台计算机的不同应用程序之间的数据交换机制。 但不包括网络通讯方式。 如果需要经由网络,在彼此运行在不同计算机上的应用程序之间交换数据,请看第7章异步输入输出,该章讲述了 Boost.Asio 库。本章展示了Boost.Interprocess库,它包括众多的类,这些类提供了操作系统相关的进程间通讯接口的抽象层。 虽然不同操作系统的进程间通讯概念非常相近,但接口的变化却很大。 Boost.Interprocess 库使通过C++使用这些功能成为可能。虽然 Boost.Asio 也可以用来在同一台计算机的应用程序间交换数据,但是使用 Boost.Interproc 阅读全文

posted @ 2012-02-23 18:45 无忧consume 阅读(505) 评论(0) 推荐(0) |

摘要:5.1.前言在标准 C++ 中,用于处理字符串的是std::string类,它提供很多字符串操作,包括查找指定字符或子串的函数。 尽管std::string囊括了百余函数,是标准 C++ 中最为臃肿的类之一,然而却并不能满足很多开发者在日常工作中的需要。 例如, Java 和 .Net 提供了可以将字符串转换到大写字母的函数,而std::string就没有相应的功能。 Boost C++ 库试图弥补这一缺憾。5.2.区域设置在进入正题之前,有必要先审视下区域设置的问题,本章中提到的很多函数都需要一个附加的区域设置参数。区域设置在标准 C++ 中封装了文化习俗相关的内容,包括货币符号,日期时间格 阅读全文

posted @ 2012-02-23 18:44 无忧consume 阅读(231) 评论(0) 推荐(0) |

摘要:6.1.概述线程就是,在同一程序同一时间内允许执行不同函数的离散处理队列。 这使得一个长时间去进行某种特殊运算的函数在执行时不阻碍其他的函数变得十分重要。 线程实际上允许同时执行两种函数,而这两个函数不必相互等待。一旦一个应用程序启动,它仅包含一个默认线程。 此线程执行main()函数。 在main()中被调用的函数则按这个线程的上下文顺序地执行。 这样的程序称为单线程程序。反之,那些创建新的线程的程序就是多线程程序。 他们不仅可以在同一时间执行多个函数,而且这在如今多核盛行的时代显得尤为重要。 既然多核允许同时执行多个函数,这就使得对开发人员相应地使用这种处理能力提出了要求。 然而线程一直被 阅读全文

posted @ 2012-02-23 18:44 无忧consume 阅读(281) 评论(0) 推荐(0) |

摘要:4.1.概述很多开发者在听到术语'事件处理'时就会想到GUI:点击一下某个按钮,相关联的功能就会被执行。 点击本身就是事件,而功能就是相对应的事件处理器。这一模式的使用当然不仅限于GUI。 一般情况下,任意对象都可以调用基于特定事件的专门函数。 本章所介绍的Boost.Signals库提供了一个简单的方法在 C++ 中应用这一模式。严格来说,Boost.Function 库也可以用于事件处理。 不过,Boost.Function 和 Boost.Signals 之间的一个主要区别在于,Boost.Signals 能够将一个以上的事件处理器关联至单个事件。 因此,Boost.Si 阅读全文

posted @ 2012-02-23 18:43 无忧consume 阅读(144) 评论(0) 推荐(0) |

摘要:3.1.概述本章介绍的是函数对象,可能称为'高阶函数'更为适合。 它实际上是指那些可以被传入到其它函数或是从其它函数返回的一类函数。 在C++中高阶函数是被实现为函数对象的,所以这个标题还是有意义的。在这整一章中,将会介绍几个用于处理函数对象的 Boost C++ 库。 其中,Boost.Bind可替换来自C++标准的著名的std::bind1st()和std::bind2nd()函数,而Boost.Function则提供了一个用于封装函数指针的类。 最后,Boost.Lambda则引入了一种创建匿名函数的方法。3.2.Boost.BindBoost.Bind 是这样的一个库, 阅读全文

posted @ 2012-02-23 18:42 无忧consume 阅读(171) 评论(0) 推荐(0) |

摘要:1.1.C++ 与 BoostBoost C++ 库是一组基于C++标准的现代库。 其源码按Boost Software License来发布,允许任何人自由地使用、修改和分发。 这些库是平台独立的,且支持大多数知名和不那么知名的编译器。Boost 社区负责开发和发布 Boost C++ 库。 社区由一个很大的C++开发人员群组组成,这些开发人员来自于全球,他们通过网站www.boost.org以及几个邮件列表相互协调。 社区的使命是开发和收集高质量的库,作为C++标准的补充。 那些被证实有价值且对于C++应用开发非常重要的库,将会有很大机会在某天被纳入C++标准中。Boost 社区在1998 阅读全文

posted @ 2012-02-23 18:40 无忧consume 阅读(143) 评论(0) 推荐(0) |

摘要:2.1.概述1998年修订的第一版C++标准只提供了一种智能指针:std::auto_ptr。 它基本上就像是个普通的指针: 通过地址来访问一个动态分配的对象。std::auto_ptr之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包含的对象。 当然这要求在初始化的时候,传给它一个由new操作符返回的对象的地址。 既然std::auto_ptr的析构函数会调用delete操作符,它所包含的对象的内存会确保释放掉。 这是智能指针的一个优点。当和异常联系起来时这就更加重要了:没有std::auto_ptr这样的智能指针,每一个动态分配内存的函数都需要捕捉所有可能的 阅读全文

posted @ 2012-02-23 18:38 无忧consume 阅读(285) 评论(0) 推荐(0) |

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3