自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(85)
  • 资源 (2)
  • 收藏
  • 关注

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 10.2 Usage(上)

用法与其它许多 Boost 库一样,这个库完全定义在头文件中,这意味着你不必构建任何东西就可以开始使用。但是,知道一点关于 lambda 表达式的东西肯定是有帮助的。接下来的章节会带你浏览一下这个库,还包括如何在 lambda 表达式中进行异常处理!这个库非常广泛,前面还有很多强大的东西。一个 lambda 表达式通常也称为匿名函数(unnamed function)。它在需要的时 候进行声明

2006-02-23 14:42:00 1777

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 10.1 Lambda

Library 10. Lambda Lambda 库如何改进你的程序? Lambda 如何适用于标准库? Lambda 用法 Lambda 总结 Lambda 库如何改进你的程序? 对函数和函数对象进行适配,使之可用于标准库算法 绑定参数到函数调用

2006-02-10 16:56:00 2015 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 9.2 Usage

用法Boost.Bind 为函数和函数对象提供了一致的语法,对于值语义和指针语义也一样。我们将从一些简单的例子开始,处理一些简单绑定的用法,然后再转移到通过嵌套绑定进行函数组合。弄明白如何使用 bind 的关键是,占位符的概念。占位符用于表示提供给结果函数对象的参数,Boost.Bind 支持最多九个参数。占位符被命名为 _1, _2, _3, _4, 直至 _9, 你要把它们放在你原先放参数

2006-02-09 14:43:00 1464

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 9.1 Bind

Part III: 函数对象与高级编程 以下四个库可能会永远改变你对C++编程的看法。虽然函数对象并不是什么新概念,特别是对于曾长期使用和定制标准库中的算法的人来说,但本书这部分中的几个库的讨论将带给函数对象全新级别的抽象。有一些领域曾经被认为是C++不

2006-02-07 16:56:00 1540

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 8.3 Usage

用法Tuples 位于名字空间 tuples, 后者又位于名字空间 boost. 使用这个库要包含头文件 "boost/tuple/tuple.hpp"。关系操作符的定义在头文件 "boost/tuple/tuple_comparison.hpp"中。tuples 的输入输出定义在头文件 "boost/tuple/tuple_io.hpp"中。tuple 的一些关键部件(tie 和 make_

2006-02-06 17:50:00 1339

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 8.2 Tuple

Tuple头文件: "boost/tuple/tuple.hpp"它包含了 tuple 类模板及库的核心部分。Header: "boost/tuple/tuple_io.hpp"包含了对 tuple 的输入输出操作符。Header: "boost/tuple/tuple_comparison.hpp"包含了 tuple 的关系操作符。Tuple 库位于 boost

2006-02-04 11:56:00 1131

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 8.1 Tuple

Library 8. Tuple Tuple 库如何改进你的程序? Tuple 库如何适用于标准库? Tuple 用法 Tuple 总结 Tuple 库如何改进你的程序? 从函数返回多个返回值 相关类型的组合 将数值组合起来

2006-02-04 01:28:00 1071

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 7.3 Usage

用法在你的程序中使用 variant,要包含头文件 "boost/variant.hpp"。这个头文件包含了整个库,所以你不必知道要使用哪些单独的特性;以后,如果你要降低相关性,可以只包含那些解决问题所要的头文件。声明一个 variant 类型时,我们必须定义一组它可以存储的类型。最常用的办法是使用模板参数。一个可以持有类型为 int, std::string, 或 double 的值的 va

2006-02-03 00:39:00 1809

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 7.2 Variant

Variant头文件: "boost/variant.hpp"通过单个头文件就包含了所有 Variant 库。"boost/variant/variant_fwd.hpp"包含了 variant 类模板的前向声明。"boost/variant/variant.hpp"包含了 variant 类模板的定义。"boost/variant/apply_visitor.hp

2006-02-01 00:43:00 1982

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 7.1 Variant

Library 7. Variant Variant 库如何改进你的程序? Variant 如果适用于标准库? Variant 用法 Variant 总结 Variant 库如何改进你的程序? 对用户指定的多种类型的进行类型安全的存储和取回 在标准库容器中存储不同类型的方法

2006-02-01 00:16:00 1092 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 6.3 Usage

用法Any库定义在名字空间 boost 内。你要用类 any 来保存值,用模板函数 any_cast 来取回存放的值。为了使用 any, 要包含头文件 "boost/any.hpp". 创建一个可以存放任意值的实例是很容易的。boost::any a;把任意类型的值赋给它也很容易。a=std::string("A string");a=42;a=3.1415;any几乎可以接受

2006-01-29 11:59:00 1512

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 6.2 Any

Any 头文件: "boost/any.hpp" 类 any 允许对任意类型进行类型安全的存储和取回。不象无类类型,any 保存了类型信息,并且不会让你在不知道正确类型的情况下获得存入的值。当然,有办法可以让你询问关于类型的信息

2006-01-27 22:48:00 1075

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 6.1 Any

Part II: 容器及数据结构 本部分讨论三个库:Boost.Any, Boost.Variant, 和 Boost.Tuple. 在某种意义上,它们都是容器,虽然它们与标准库的容器类毫无共同之处。它们都是非常有用的库,许多人和我一样,每天都在使用它们

2006-01-25 18:43:00 1324

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 5.2 Usage

用法要使用Boost.Regex, 你需要包含头文件"boost/regex.hpp". Regex是本书中两个需要独立编译的库之一(另一个是Boost.Signals)。你会很高兴获知如果你已经构建了Boost— —那只需在命令提示符下打一行命令——就可以自动链接了(对于Windows下的编译器),所以你不需要为指出那些库文件要用而费心。你要做的第一件事就是声明一个类型 basic_re

2006-01-25 17:27:00 3522

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 5.1 Regex

Library 5. RegexRegex库如何改进你的程序? 为C++带来了对正则表达式的支持 改进有效输入的健壮性 在文本处理中常常会用到正则表达式。例如,有很多验证有效性的工作适合使用正则表达式。考虑一个应用程序,它要求输入只由数字组成。而另一个程序可能要求一种特殊的格式,如三个数字,后跟一个字母,再后跟两个数

2006-01-20 10:29:00 1549

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 4.3 Usage

用法为了开始使用Operators库,为你的类实现适用的操作符,就要包含头文件"boost/operators.hpp", 并从一个或多个Operator基类(它们的名字与它们所表示的概念一样)进行派生,它们都定义在名字空间 boost中。注意,继承不一定要是公有的,私有继承也可以。在这一节,我们将看到几个使用不同概念的例子,并关注一下在C++里以及在概念上,算术操作符和关系操作符是如何工作的

2006-01-19 11:11:00 1700

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 4.2 Operators

Operators头文件: "boost/operators.hpp"Operators库由多个基类组成。每一个类生成与其名字概念相关的操作符。你可以用继承的方式来使用它们,如果你需要一个以上的功能,则需要使用多重继承。幸运的是,Operators中定义了一些复合的概念,在大多数情况下可以无须使用多重继承。下面将介绍最常用的一些Operator类,包括它们所表示的概念,以及它们对派生类

2006-01-18 12:27:00 1390

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 4.1 Operators

Library 4. Operators Operators库如何改进你程序? Operators 用法 Operators 总结 Operators库如何改进你的程序? 提供一组完整的比较操作符 提供一组完整的算术操作符 提供一组完整的迭代器

2006-01-16 17:22:00 1094

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.6 enable_if

enable_if头文件: "boost/utility/enable_if.hpp"有时候,我们希望控制某个函数或类模板的特化是否可以加入到重载决议时使用的重载或特化的集合中。例如,考虑一个重载的函数,它有一个版本是带一个int参数的普通函数,另一个版本是一个函数模板,它要求参数类型 T 具有一个名为type的嵌套类型。它们看起来可能象这样:void some_func(int

2006-01-14 15:27:00 2021 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.5 addressof

addressof头文件: "boost/utility.hpp"要取得一个变量的地址,我们要依赖于返回的值是否真的是这个变量的地址。但是,技术上重载operator&是有可能的,这意味着存有恶意的人可以破坏你的地址相关的代码。boost::addressof 被用于获得变量的地址,不管取址操作符是否被误用。通过使用一些灵巧的内部机制,模板函数 addressof 确保可以获得真实的对

2006-01-13 18:33:00 1407

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.4 noncopyable

noncopyable头文件: "boost/utility.hpp"通常编译器都是程序员的好朋友,但并不总是。它的好处之一在于它会自动为我们提供复制构造函数和赋值操作符,如果我们决定不自己动手去做的话。这也可能会导致一些不愉快的惊讶,如果这个类本身就不想被复制(或被赋值)。如果真是这样,我们就需要明确地告诉这个类的使用者复制构造以及赋值是被禁止的。我不是说在代码中进行注释说明,而是说

2006-01-13 00:11:00 4928 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.3 checked_delete

checked_delete头文件: "boost/checked_delete.hpp"通过指针来删除一个对象时,执行的结果取决于执行删除时被删除的类型是否可知。对一个指向不完整类型的指针执行delete几乎不可能有编译器警告,这会导致各种各样的麻烦,由于析构函数可以没有被执行。换句话说,即进行清除的代码没有被执行。checked_delete 在对象析构时执行一个静态断言,测试类是

2006-01-12 16:25:00 2238 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.2 BOOST_STATIC_ASSERT

BOOST_STATIC_ASSERT头文件: "boost/static_assert.hpp"在运行期执行断言可能是你经常用到的,也是非常合理的。它是测试前置条件、后置条件以及不变式的好方法。执行运行期断言有很多不同的方法,但是在编译期你如何进行断言呢?当然,唯一的方法就是让编译器产生一个错误,这是很平常的事情(我在无意中都做过几千次了),但如何从错误信息中获得有意义的信息却不是那

2006-01-12 15:27:00 1370

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 3.1 Utility

Library 3. Utility Utility 库如何改进你的程序? 编译期断言 BOOST_STATIC_ASSERT

2006-01-12 15:26:00 1071

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 2.5 lexical_cast

lexical_cast头文件: "boost/lexical_cast.hpp"所有应用都会使用字面转换。我们把字符串转为数值,反之亦然。许多用户定义的类型可以转换为字符串或者由字符串转换而来。你常常是在需要这些转换时才编写代码,而更好的方法是提供一个可重用的实现。这就是 lexical_cast的用途所在。你可以把lexical_cast 想象为使用一个 std::stringst

2006-01-09 23:28:00 1284

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 2.4 numeric_cast

numeric_cast头文件: "boost/cast.hpp"整数类型间的转换经常会产生意外的结果。例如,long 可以拥有比short更大范围的值,那么当从 long 赋值到short 并且 long的数值超出了 short的范围时会发生什么?答案是结果是由实现定义的(比"你不可能明确知道"好听一点的说法)。相同大小整数间的有符号数到无符号数的转换是好的,只要有符号数的数值是正的

2006-01-08 20:56:00 1551

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 2.3 polymorphic_downcast

polymorphic_downcast头文件: "boost/cast.hpp"有时 dynamic_cast 被认为太过低效(的确如此)。执行dynamic_cast需要额外的运行时间。为了避免这些代价,常常会诱使你使用 static_cast, 它没有这些性能代价。static_cast 用于向下转型可能在危险的,并会导致错误,但它的确比dynamic_cast要快。如果这些加速

2006-01-07 17:38:00 1142

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 2.2 polymorphic_cast

polymorphic_cast头文件: "boost/cast.hpp"C++中的多态转型是用 dynamic_cast来实现的。dynamic_cast有一个有时会导致错误代码的特性,那就是它对于所使用的不同类型会有不同的行为。在用于一个引用类型时,如果转型失败,dynamic_cast 会抛出一个std::bad_cast异常。这样做的原因很简单,因为C++里不允许有空的引用,所

2006-01-07 17:36:00 1321

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 2.1 Conversion

Library 2. ConversionConversion 库如何改进你的程序? 可理解、可维护,以及一致的多态类型转换 静态向下转型使用比static_cast更安全的结构 进行范围判断的数字转换确保正确的值逻辑以及更少的调试时间 正确且可重用的文字转换导致更少

2006-01-07 17:33:00 1060

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.7 weak_ptr

weak_ptr头文件: "boost/weak_ptr.hpp"weak_ptr 是 shared_ptr 的观察员。它不会干扰shared_ptr所共享的所有权。当一个被weak_ptr所观察的 shared_ptr 要释放它的资源时,它会把相关的 weak_ptr的指针设为空。这防止了 weak_ptr 持有悬空的指针。你为什么会需要 weak_ptr? 许多情况下,你需要旁观或

2006-01-07 17:20:00 1983 2

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.6 Intrusive_ptr

intrusive_ptr头文件: "boost/intrusive_ptr.hpp"intrusive_ptr 是shared_ptr的插入式版本。有时我们必须使用插入式的引用计数智能指针。典型的情况是对于那些已经写好了内部引用计数器的代码,而我们又没有时间去重写它(或者已经不能获得那些代码了)。另一种情况是要求智能指针的大小必须与裸指针大小严格相等,或者shared_ptr的引用计

2006-01-07 17:18:00 2024

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.5 shared_array

shared_array头文件: "boost/shared_array.hpp"shared_array 用于共享数组所有权的智能指针。它与shared_ptr的关系就如scoped_array与scoped_ptr的关系。shared_array 与 shared_ptr 的不同之处主要在于它是用于数组的而不是用于单个对象的。在我们讨论 scoped_array时,我提到过通常st

2006-01-07 17:17:00 1470

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.4 shared_ptr

shared_ptr头文件: "boost/shared_ptr.hpp"几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了控制被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计费降为零,没有对象再需要这个共享的对象,这个对象就自动被销毁了。引用计数智能指针可以分为插入式(intrusive)和非插入式(non-intrusive)两类。

2006-01-07 17:16:00 2437 6

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.3 scoped_array

scoped_array头文件: "boost/scoped_array.hpp"需要动态分配数组时,通常最好用std::vector来实现,但是有两种情形,看起来用数组更应该: 一种是为了优化,用vector多少有一些额外的内存和速度开销;另一种是为了某种原因,必须要求数组的大小是固定的。[5] 动态分配的数组会遇到与普通指针一样的危险,并且还多了一个(也是最常见的一个),错误调用d

2006-01-07 17:15:00 1446

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.2 scoped_str

scoped_ptr头文件: "boost/scoped_ptr.hpp"boost::scoped_ptr 用于确保能够正确地删除动态分配的对象。scoped_ptr 有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权而auto_ptr可以。事实上,scoped_ptr永远不能被复制或被赋值!scoped_ptr 拥有它所指向的资源的所有权,并永远不会放弃这

2006-01-07 17:14:00 1358

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 1.1 Smart_ptr

Library 1. Smart_ptr Smart_ptr库如何改进你的程序? 何时我们需要智能指针? Smart_ptr如何适应标准库? scoped_ptr scoped_array shared_ptr shared_array intrusive_ptr weak_ptr Smart_

2006-01-07 17:13:00 1354

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Part I (Library 1-5)

Part I: 通用库要给本书的这一部分起一个合适的名字并不容易。本书的结构是围绕各个不同领域(如容器和高级编程),那些名字都好取;除了这一部分,它包括一些我们经常用到的东西:智能指针、类型转换工具等等。总不能一开始第一部分就叫Miscellaneous, 或者 Ubiquitous, 或者 Frequently Used Libraries. 虽然它们的确就是这些东西,但这些名字并不

2006-01-07 17:09:00 1134 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost —— 介绍(8)

杂项Boost.ConversionConversion库包含有一些函数,它们是现有的强制类型转换操作符(static_cast, const_cast, 和 dynamic_cast)的增强。Conversion为安全的多态转换增加了 polymorphic_cast 和 polymorphic_downcast,为安全的数字类型转换增加了 numeric_cast,为文本转换(如s

2006-01-07 17:08:00 1969

翻译 Beyond the C++ Standard Library: An Introduction to Boost —— 介绍(7)

输入/输出Boost.AssignAssign帮助你把一系列的值赋给容器。它通过对operator, (逗号操作符) and operator()() (函数调用操作符)的重载,带给用户一种数据赋值的很容易的方法。除了对原型风格的代码特别有用,这个库的功能在其它时候也很有用,使用这个库有助于提高代码的可读性。使用本库中的list_of还可以就地生成无名数组。Assign 的作者是

2006-01-07 17:07:00 1189

翻译 Beyond the C++ Standard Library: An Introduction to Boost —— 介绍(6)

数学及数字处理Boost.Integer这个库提供了对整数类型的有用功能,如编译期的最小、最大值常数[3],基于给定位长的合适大小的类型,静态二进制对数计算等等。还包括从1999年C标准头文件中的typedef。[3] std::numeric_limits 仅能以函数方式提供这些值。Integer 的作者是 Beman Dawes 和 Daryle Walker.

2006-01-07 16:59:00 1449

POSA_Volume_3_Patterns_for_Resource_Management

Pattern_Oriented_Software_Architecture_Volume_3__Patterns_for_Resource_Management

2011-08-07

POSA_Volume_2_Patterns_for_Concurrent_and_Networked_Objects

Pattern-Oriented Software Architecture 第二卷

2011-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除