
Boost
文章平均质量分 52
grefen
这个作者很懒,什么都没留下…
展开
-
vs2010下编译Boost 1.46
1 下载boost2 解压boost3 编译bjam.exe:进入VS2010的Command Prompt,切换目录到boost解压目录下的子目录tools\build\v2\中,运行其中的bootstrap.bat,在当前目录中会生成bjam.exe, 将bjam.exe拷贝到解压目录中;4 修改tools\build\v2\user-config.jam,在# MSVC c转载 2012-07-07 16:20:34 · 868 阅读 · 0 评论 -
boost学习之-enable_if
用法:1 你需要在把一个符合某些条件的函数加入到或排除出重载决议集合中。你需要根据某个条件将一个类模板的特化版本加入到或排除出特化集合中。2 实现方法,看如下例子:void some_func(int i){ std::cout }template void some_func(T t,typename boost::原创 2012-07-08 18:21:46 · 3366 阅读 · 1 评论 -
boost学习之-Operators
用法:1 c++一个重要的功能是复用,避免写重复代码,而boost为自定义类的operator的实现代码提供了复用实现2 operator重载中,有这样一个事实:多数运算符重载实现中可以通过调用少数的运算符重载函数来实现 如 下:下面的实现,都是通过两个运算符 friend bool operator(x > y); } friend bool operat原创 2012-07-08 20:40:07 · 1294 阅读 · 0 评论 -
boost学习之-any
用法:1 内部原理:通过模板类型的构造函数来实现2 通过any_cast来转换为真实的类型3 通过any_cast转换指针,如果失败返回空4 通过any_cast转换引用,失败抛出异常抛出异常代表非预料性错误,返回空不代表错误;原创 2012-07-09 22:10:38 · 616 阅读 · 0 评论 -
boost学习之-Variant
用法:1 他与c语言中的union相对应2 通过模板参数定义可以支持的类型3 通过boost::get()进行访问4 可通过boost::static_visitor与boost::apply_visitor(visitor, variant).的组合来访问总结,目前还没想到这个有什么很好的用处;看例子体会用法:class print_visitor : pub原创 2012-07-09 22:44:51 · 1971 阅读 · 0 评论 -
boost学习之-Lambda
要点:1 c++是面向对象的语言,尽量把所以一切东西看成对象,包括数据类型,函数,表达式,所以把这些东西转换为对象时非常关键的, boost基本上就是把什么都看做是对象来处理,这样把一般函数或表达式转化为函数对象很重要,同前一次说的bind,和这一次要学习 的lambda,本质的作用就是把函数或表达式转换为函数对象;lambda可以把表达式转换为函数对象,避免了程序中写很多仿原创 2012-07-15 16:02:02 · 1075 阅读 · 0 评论 -
boost学习之-Tuples
要点:1 是标准库中std::pair的扩展,只不过pair是一个2-tuple2 tuple最多可以支持10个元素3 tuple较结构体相比,更容易声明,定义和使用;4 与std::make_pair相对应的有boost::make_tuple5 访问tuple boost::tuple triple(42,3.14,"The amazing tuple!")原创 2012-07-14 16:37:34 · 832 阅读 · 0 评论 -
boost学习之-function
要点:1 用于保存函数对象,本身是函数对象2 与bind一起使用,威力巨大:class command { boost::function f_;public: command() {} command(boost::function f):f_(f) {} void execute() { if (f_) { f_(); } }原创 2012-07-15 21:27:57 · 708 阅读 · 0 评论 -
boost学习之bind
要点:1 是标准库中bind1st和bind2st的扩展,功能更强大2 他是一个创建函数对象的工具,而函数对象时标准库的算法需要的,所以bind提供了方便创建函数对象的功能3 使用bind的代码更简洁,易懂,较标准库的mem_fun,mem_fun_ref等好用4 bind的占位符_1,_2...对普通函数最多有9个,对于成员函数仅支持8个,第一个参数是类的this指针5 bi原创 2012-07-14 19:32:28 · 1030 阅读 · 0 评论 -
boost学习之-Signals
要点:1 函数和函数对象的灵活多点回调2健壮的触发器及事件处理的机制3兼容于函数对象工厂,如 Boost.Bind 和 Boost.Lambda4 Boost.Signals 库具体化了信号(signals)和插槽(slots),信号指的是某种可被"抛出"的东西,而插槽是接收该信号的连接者。这是一种著名的设计模式,它还有另外一些名字Observer, signals/slots原创 2012-07-15 22:10:37 · 945 阅读 · 0 评论 -
boost学习之-生产者消费者问题例子
生产者消费者问题在线程编程中是基础问题,很重要,很多其他问题的解决都通过扩展该问题的解决方法来解决的;boost中的一个例子是这样写的,很简洁;所以boost很强大,屏蔽掉了很多繁琐的问题;#include #include #include #include #include class bounded_buffer : private boost::noncop原创 2012-07-21 23:36:11 · 3349 阅读 · 0 评论 -
boost 学习之-Synchronization
要点:1 boost提供了如下lock模板类,以mutex类型作为模板参数Class template lock_guardClass template unique_lockClass template shared_lockClass template upgrade_lockClass template upgrade_to_unique_lockMutex-specific原创 2012-07-21 23:29:34 · 1428 阅读 · 0 评论 -
boost学习之—Filesystem
要点:1 头文件 #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations #include // for std::cout using boost::filesystem;2 在path.hpp中定义了路径类 a 支持多种编码格式,包括uni原创 2012-07-21 16:18:53 · 1322 阅读 · 0 评论 -
boost学习之addressof
用法:1 要获得一个对象的真实地址请用addressof,而非operator&,2 addressof会绕过operator&而取得真实地址没什么好说的,取对象地址最安全做法就是用这个了!原创 2012-07-08 17:09:41 · 781 阅读 · 0 评论 -
boost学习之noncopyable
用法:1 私有派生于noncopyable的类都不能复制和赋值2 原理是:noncopyable内部禁止了赋值和复制3 该类可以被很好被复用,减少工作量,不用把想要禁止赋值和复制的类都自行定义私有的赋值和复制方法,只需从该类派生即可4 什么情况下我们需要自定义复制构造函数或赋值操作符?无论何时你需要定义析构函数、复制构造函数、或赋值操作符三个中的任意一个,你也需要定义另外两个原创 2012-07-08 17:03:44 · 682 阅读 · 0 评论 -
boost学习之-lexical_cast
用法:1 lexical_cast 想象为使用一个 std::stringstream 作为字符串与数值的表示之间的翻译器2 转换对象必须重载输入输出操作符3 如果转换有问题,会抛出异常4 一般用途:从字符串类型到数值类型的转换从数值类型到字符串类型的转换你的自定义类型所支持的所有字面转换总结,该转换使用很方面,代码美观!原创 2012-07-08 16:09:16 · 660 阅读 · 0 评论 -
boost学习之-scoped_array
用法:1 与socped_ptr类似,之不过它是最数组生存期的管理,析构用delete[]2 最好用vector,因为更强大,更灵活如: std::vector array(100, 0);//定义100个大小的数组,初始化为0 //应用该数组首地址 &array[0] //memcpy系列函数也没有问题,只要不越界,很好用 //vector内部是用动态原创 2012-07-07 18:22:47 · 803 阅读 · 0 评论 -
boost学习之-shared_ptr
用法:1 shared_ptr是具有引用计数功能的指针,一般用于复制操作很昂贵,或代表的东西被多个东西共享; 引用计数功能分为侵入式和非侵入式,侵入式要求类提供增加或减少计数的函数或数据成员,而非侵入式的没有这方面要求2 可以在构造时传入删除器,使用自己的删除方法,这一点很有用,因为用途更广泛3 shared_ptr之间可以复制4 可以从裸指针,另外一个shared_原创 2012-07-07 19:13:55 · 732 阅读 · 0 评论 -
boost学习之-scoped_ptr
用法:1 不需要手工删除,析构函数自动调用delete2 不能被复制和复制构造,因为这个函数是私有函数3 一个scoped_ptr仅保存一个裸指针,不能两个以上scoped_ptr保存一个裸指针,因为析构时会有问题4 用scoped_ptr实现impl机制时,必须自定义复制构造函数和赋值操作符,因为这两个函数在scoped_ptr是私有的总之,scoped_ptr应该被原创 2012-07-07 18:11:16 · 585 阅读 · 0 评论 -
boost学习之-shared_array
用法: 1 用于共享数组所有权的智能指针 2 用于数组而不是单个对象 3 std::vector的shared_ptr提供了比shared_array更多的灵活性综上,个人认为shared_array价值不大,不如用std::vector的shared_ptr组合,有重复之嫌,只会用std::vector的shared_ptr组合即可,保存脑细胞学习更重要的东西;原创 2012-07-07 19:18:24 · 2690 阅读 · 0 评论 -
boost学习之-intrusive_ptr
用法:1 与share_ptr功能上是一样的,只不过引用计数是采用侵入式实现的,尽量避免使用,除非:已有代码使用或提供了插入式的引用计数智能指针的大小必须与裸指针的大小相等需要把 this 当作智能指针来使用时(this是智能指针的this)2 需要你提供两个函数 intrusive_ptr_add_ref 和 intrusive_ptr_release. 它们都要接受一原创 2012-07-07 22:08:18 · 892 阅读 · 0 评论 -
boost学习之-BOOST_STATIC_ASSERT
用法:1 编译器断言,同样在运行期通过断言检测程序正确性,但是该宏可以在编译器检查正确性2 由于编译器断言要求在编译器,断言的内容的值是能够计算出来的如:BOOST_STATIC_ASSERT(sizeof(int) 总结,也是比较有用的工具;原创 2012-07-08 16:36:12 · 671 阅读 · 0 评论 -
boost学习之checked_delete
用法:删除一个动态分配的对象时,必须调用它的析构函数。如果这个类型是不完整的,即只有声明没有定义,那么析构函数可能会没被调用。这是一种潜在的危险状态,所以应该避免它。对于类模板及函数模板,风险会更大,因为无法预先知道会使用什么类型。使用checked_delete 和 checked_array_delete, 可以解决这个删除不完整类型的问题。它没有运行期的额外开销,只是直接调用原创 2012-07-08 16:46:15 · 964 阅读 · 0 评论 -
boost学习之-Regex
用法:1 提供列正则表达式的匹配,寻找和替换功能2 匹配用法 boost::regex reg("."); assert(boost::regex_match(“a”,reg)==true);3 查找用法 boost::regex reg("(xxx))");boost::smatch m;std::string s="Calls to xxx. \原创 2012-07-08 22:20:39 · 924 阅读 · 0 评论 -
boost学习之-weak_ptr
用法:1 weak_ptr是share_ptr的观察者,打破递归的依赖关系,旁观一个共享资源而不能拥有所有权,或者为了避免悬空指针2 weak_ptr 不对它所观察的指针提供重载的 operator* 和 operator->,所以要访问观察指针,需要转换回share_ptr3 weak_ptr的expired()方法用于检测观察的share_ptr是不是还是有效4 weak_pt原创 2012-07-07 22:42:56 · 753 阅读 · 0 评论 -
boost学习之-polymorphic_cast
用法:1 dynamic_cast对指针类型转换失败会返回空,对引用转型失败会抛出异常,而polymorphic_cast统一了这两种不一致的行为;polymorphic_cast会都抛出异常2 polymorphic_cast的好处是避免因为疏忽导致忘记测试转换后的指针是否为空,因为他抛出异常3 当多态转型的失败是预期的时候,使用 dynamic_cast,当一个多态转型必须成功以确原创 2012-07-08 11:40:07 · 695 阅读 · 0 评论 -
boost学习之-polymorphic_downcast
用法:1 polymorphic_downcast在调试状态下会测试转换是否成功,在非调试状态下内部直接调用static_cast实现2 在向下转型方面,速度比dynamic_cast快3 polymorphic_downcast 用于那些你应该用而又不想用dynamic_cast的情形总结,polymorphic_downcast最好不用,不如记住简单的dynamic_c原创 2012-07-08 11:56:48 · 780 阅读 · 0 评论 -
boost学习之-numeric_cast
用法:1 不同类型之间进行转换时,尽量使用numeric_cast,他会检查数据的范围,如果有问题会抛出异常2 对浮点数类型,不会抛出异常,会产生截断3 原则在无符号与有符号类型间进行赋值或比较时在不同大小的整数类型间进行赋值或比较时从一个函数返回类型向一个数值变量赋值,为了预防该函数未来的变化总结,numeric_cast非常有用,尽量使用,他会在转换后的类型原创 2012-07-08 12:31:27 · 1521 阅读 · 0 评论 -
boost学习之-Thread
要点:1 线程对象不可以复制,但是可以转移;2 当线程对象析构时,线程变为detached,但线程并未结束;也可以通过detach()方法来显示的detached;3 等待线程结束,可以用join() ortimed_join()方法;4 可以调用interrupt()方法结束一个线程,线程会在运行到interruption points时抛出boost::thread_int原创 2012-07-21 21:48:52 · 3177 阅读 · 0 评论