
boost
郁闷阳光
作为码农,建此博客的目的是记录工作历程中的点点滴滴,分享工作中的感悟、思考。
展开
-
编译 boost 的正则表达式部分
VC利用boost库解析正则表达式最近做数据库涉及到解析sql语句,觉得最好的办法是写正则表达式解析,由于vc6没有解析函数,自己写又不甘心,后来从网上找到了boost库,解决了这个问题.boost下载地址:http://www.boost.orgboost库安装比较麻烦,需要自己编译源文件,我整理了一下,如果仅仅需要做正则表达式,按下面的代码敲就行了.cmdvcvars32.转载 2012-05-15 13:57:43 · 409 阅读 · 0 评论 -
Boost源码剖析之:泛型指针类any之海纳百川
C++是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非explicit构造函数创建临时变量的隐式转换或是在int,long这些基本型别间的)又另当别论。总的说来,为了保持型别安全,C++有严厉的要求。然而有时候程序员可能有这样的需要:int i;转载 2012-05-15 14:12:51 · 478 阅读 · 0 评论 -
Boost源码剖析之:增强的std::pair--Tuple Types (一)
0 动机[1]假设你有这样一个函数:它接受两个整型数据并返回它们整除的结果,像这样:int DevideInts(int n,int d){ return n/d;}但是我们可能需要更多信息,比如,余数。函数的返回值已被占用,我们可以为函数加一个参数:int DevideInts(int n,int d,int& Remainder转载 2012-05-15 14:19:48 · 575 阅读 · 0 评论 -
Signals 库如何改进你的程序?
Signals 库如何改进你的程序?函数和函数对象的灵活多点回调健壮的触发器及事件处理的机制兼容于函数对象工厂,如 Boost.Bind 和 Boost.LambdaBoost.Signals 库具体化了信号(signals)和插槽(slots),信号指的是某种可被"抛出"的东西,而插槽是接收该信号的连接者。这是一种著名的设计模式,它还有另外一些名字Obse转载 2012-05-15 14:33:50 · 538 阅读 · 0 评论 -
Boost.Lambda 用法详解(三)
Lambda 表达式中的类型转换在 lambda 表达式中有四种特殊的"转型操作符"[7] 来进行类型的转换:ll_dynamic_cast,ll_static_cast, ll_reinterpret_cast, 和ll_const_cast. 这些名字与对应的C++关键字不一样,因为它们不能被重载。要使用这些类型转换,就要包含头文件"boost/lambda/casts.hpp转载 2012-05-15 14:38:04 · 845 阅读 · 0 评论 -
Library 9. Bind
Bind 库如何改进你的程序?使函数和函数对象适用于标准库算法使用一致语法创建绑定器强大的函数组合在使用来自于标准库的算法时,你常常需要提供给它们一个函数或一个函数对象。这是对算法的行为进行定制的一个好方法,但你通常需要写一个新的函数对象,因为你没有组合函数或改变参数的顺序等所需的工具。虽然标准库已经提供了一些可用的工具,如bind1st 和 bind2nd转载 2012-05-15 14:41:06 · 519 阅读 · 0 评论 -
boost::function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/function0.hpp" 到"boost/function/function10.hpp". 如果你知道你想保存在function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含"boost/func转载 2012-05-15 14:35:50 · 511 阅读 · 0 评论 -
Boost.Lambda 用法详解(二)
Boost.Lambda 支持C++中的所有算术操作符,因此几乎不再需要仅为了算术函数对象而包含 。以下例子示范了这些算术操作符中某些的用法。vector vec中的每个元素被加法和乘法操作符修改。#include #include #include #include "boost/lambda/lambda.hpp"int main() { using name转载 2012-05-15 14:39:11 · 1180 阅读 · 0 评论 -
Boost.Bind用法详解(二)
函数组合,Part II在SGI STL中的另一个常用的函数组合是 compose1 ,在 Boost.Compose 中是compose_f_gx 。这些函数提供了用一个参数调用两个函数的方法,把最里面的函数返回的结果传递给第一个函数。有时一个例子胜过千言万语,设想你需要对容器中的浮点数元素执行两个算术操作。我们首先把值增加10%,然后再减少10%;这个例子对于少数工作在财政部门的人来说转载 2012-05-15 14:43:53 · 828 阅读 · 0 评论 -
Boost.Bind用法详解(一)
Boost.Bind 为函数和函数对象提供了一致的语法,对于值语义和指针语义也一样。我们将从一些简单的例子开始,处理一些简单绑定的用法,然后再转移到通过嵌套绑定进行函数组合。弄明白如何使用bind 的关键是,占位符的概念。占位符用于表示提供给结果函数对象的参数,Boost.Bind 支持最多九个参数。占位符被命名为_1, _2,_3, _4, 直至_9, 你要把它们放在你原先放参数转载 2012-05-15 14:42:49 · 1145 阅读 · 0 评论 -
Boost.Lambda 用法详解(一)
与其它许多 Boost 库一样,这个库完全定义在头文件中,这意味着你不必构建任何东西就可以开始使用。但是,知道一点关于lambda 表达式的东西肯定是有帮助的。接下来的章节会带你浏览一下这个库,还包括如何在 lambda 表达式中进行异常处理!这个库非常广泛,前面还有很多强大的东西。一个lambda 表达式通常也称为匿名函数(unnamed function)。它在需要的时 候进行声明和定转载 2012-05-15 14:39:46 · 3501 阅读 · 0 评论 -
VC下完全或部分编译boost
一、下载boost在boost的官网boost.org有下载地址http://sourceforge.net/projects/boost/.以Boost 1.33.1 Released 为例,直接下载。程序安装后解压缩到目录\boost_1_33_1.二、完整编译boost1、编译bjam在控制台下面运行...\boost_1_33_1\tools\build\jam_src目录转载 2012-05-15 14:04:16 · 747 阅读 · 0 评论 -
C++ Boost Assign 文档(翻译) (一)
1、简介 这个库的设计目的是为了使容器可以更方便地填充数据,这主要借助重载通过重载operator,()和operator()()实现。对两个操作符重载使得构造值列表然后把它们拷贝到相应容器里成为可能:逗号分隔的列表: vectorint> v; v += 1,2,3,4,5,6,7,8,9;括号分隔的列表: mapint>转载 2012-05-15 14:06:46 · 536 阅读 · 0 评论 -
C++ Boost Assign 文档(翻译) (二)
o list_inserter 类 这个类负责向容器中插入元素。而且,它还是扩展库以支持自定义容器的关键所在。纲要namespace boost{ namespace assign { templatevoid > class list_inserter转载 2012-05-15 14:10:30 · 622 阅读 · 0 评论 -
Boost源码剖析之:型别分类器——type_traits
动机1. 分派下面有一个模板函数,假设一个动物收容组织提供了它,他们接受所有无家可归的可怜的小动物,于是他们向外界提供了一个函数接受注册。函数看起来像这样:template //T表示接受的是何种动物void AcceptAnimals(T animal){ ... //do something};但是,如果他们想将猫和狗分开处理(毕转载 2012-05-15 14:18:16 · 955 阅读 · 0 评论 -
Boost源码剖析之:增强的std::pair--Tuple Types (二)
4 初始化的全过程然而在跟踪之前我们须了解tuple的构造函数,因为所有初始化参数由此进入:template class T0, class T1, class T2, class T3, class T4,class T5, class T6, class T7, class T8, class T9>class tuple :public detail::map_t转载 2012-05-15 14:20:45 · 852 阅读 · 0 评论 -
Boost源码剖析之:容器赋值-assign
相信大多数使用STL的人都是为了使用里面的容器,使用vector、list、map的程序员对以下代码可以说是非常熟悉了:vector i_v;i_v.push_back(1);i_v.push_back(2);i_v.push_back(3);i_v.push_back(4);i_v.push_back(5);挺枯燥,是吧?用boost的assignme转载 2012-05-15 14:21:23 · 548 阅读 · 0 评论 -
Boost.Signals用法详解
当你面对需要用多段代码来处理一个事件的情况时,典型的解决方案有:用函数指针进行回调,或者直接对产生事件的子系统与处理事件的子系统之间的依赖性进行编码。这种设计常常会导致循环的依赖性。通过使用 Boost.Signals, 你将获得灵活性和解耦。要开始使用这个库,首先要包含头文件"boost/signals.hpp".[2] [2] Boost.Signals库和转载 2012-05-15 14:23:02 · 2952 阅读 · 0 评论 -
Library 11. Function
Function 库如何改进你的程序?保存函数指针和函数对象,用于后续的调用在进行回调的设计中,常常需要保存函数和函数对象,而且某些函数或类也是通过函数指针或函数对象来配制其客户化功能。通常,函数指针用于实现回调及延时函数。但是,仅仅使用函数指针会有很多限制,更好的方法是采用泛型机制来定义要被保存的函数的署名特征,而让调用者来决定提供哪一种的类函数实体(函数指针或函数对象)。这转载 2012-05-15 14:36:17 · 559 阅读 · 0 评论 -
Library 10. Lambda
Lambda 库如何改进你的程序?对函数和函数对象进行适配,使之可用于标准库算法绑定参数到函数调用将任意的表达式转换为可以兼容标准库算法的函数对象就地定义匿名函数,提高代码的可读性和可维护性在需要的时间和地点实现谓词在使用标准库或其它采用相似设计的库时,需要依靠函数或函数对象来对算法进行配置,你通常要编写很多小的函数对象来执行一些非常简单的操作。转载 2012-05-15 14:40:06 · 420 阅读 · 0 评论