文章标签 ‘boost’

boost\property_tree\detail\ptree_implementation.hpp文件在VS2010正式版中无法编译通过,第30行有错误: error C2440: ‘specialization’ : cannot convert from ‘const std::string std::_Pair_base<_Ty1,_Ty2>::* ‘ to ‘const std::basic_string<_Elem,_Traits,_Ax> std::pair<_Ty1,_Ty2>::* ‘ 这个错误在VS2010 Beta2中就存在了,具体请看:https://svn.boost.org/trac/boost/ticket/3594 解决方法: 到Boost官方下载最新的ptree_implementation.hpp文件: https://svn.boost.org/trac/boost/browser/trunk/boost/property_tree/detail/ptree_implementation.hpp 先尝试用最新的ptree_implementation.hpp编译一次,如果编译不过,就用下面我提供的ptree_implementation.hpp文件,此文件来源于Boost官方SVN Revision 59734,原文件修正了VS2010 Beta2的编译错误问题,但在VS2010正式版下依然有问题,所以我添加了一行代码以修正此问题,具体请看源文件第22行。 Download:

2010年4月21日09:58 | 1 条评论
分类: C/C++

CSDN上求助无果,只好用自创的非主流方法了。 asio自带的例子里是用deadline_timer的async_wait方法来实现超时的,这种方法需要单独写一个回调函数,不利于把连接和超时封装到单个函数里。传统的Winsock编程可以先把socket设为非阻塞,然后connect,再用select来判断超时,asio也可以这样做,唯一“非主流”的是asio里没有一个类似select的函数,所以得调用原始的Winsock API,也就牺牲了跨平台:

2009年12月8日17:22 | 没有评论
分类: C/C++

boost里有个crc库,可以方便的计算crc值,使用也很简单,下面是个计算crc32的例子:   #include <iostream> #include <boost/crc.hpp>   int main() { char data[] = "StarsunYzL";   boost::crc_32_type crc32; crc32.process_bytes(data, sizeof(data) – 1); std::cout << std::hex << std::uppercase << crc32.checksum() << std::endl; // 输出D5FABFDB   return 0; } 还可以计算crc16等,具体参考crc库文档。 (怎么自己实现crc32计算,请看《计算CRC32源码》)

2009年11月30日11:24 | 没有评论
分类: C/C++
标签: ,

许多语言都内置有foreach这种语法用于遍历数组,比如Base、C#,可惜C++没有,虽然STL里有std::for_each,但它需要单独写一个函数对象,一点也不方便,相比std::for_each,boost提供了更强大更方便的BOOST_FOREACH,下面是几个例子:

2009年11月25日16:32 | 没有评论
分类: C/C++
标签: ,

本来只想学习asio的,却被boost的强大所吸引,几乎两天都在看boost文档,还好html的比较好看,比起看Intel手册是舒服多了。 boost的thread类可以用任意函数来做线程函数,甚至可以是类的非静态成员函数,并且函数的返回类型和参数都不限(参数个数限制为最多9个)。MFC程序员渴望的用类的非静态成员函数做线程函数用boost::thread得以几乎完美的实现。 下面是个十分简化的模拟boost::thread,主要实现可以用任意函数做线程函数,包括类的非静态成员函数。如下:

2009年10月4日03:29 | 3 条评论
分类: C/C++
标签: , ,

最近封装了一个IOCP类,实现了Socket池、IO缓冲区池,自认能满足我那个破服务端的需求。在将近完工的时候突然想起ACE和boost::asio,于是想试试这两个颇具盛名的C++网络库到底有多牛x。 先看boost,因为boost在C++界名气实在是太大,除了boost::asio以外还有其它优秀的库可以用。 boost大部分库不需要编译就可以直接#include使用,boost 1.40.0只有如下库需要编译: Boost.Filesystem Boost.IOStreams Boost.ProgramOptions Boost.Python Boost.Regex Boost.Serialization Boost.Signals Boost.System Boost.Thread Boost.Wave Boost.DateTime Boost.Graph Boost.Test 编译boost没有想象中的那么麻烦,在Windows下,用Visual C++编译boost只需要两条命令(注意boost不再支持Visual C++ 6.0,请使用Visual C++ 7.1以上的版本编译,我用的是Visual C++ 2008 SP1)。

2009年10月2日10:27 | 没有评论
分类: C/C++
标签: ,