摘要:今天用asio写一个简单的server时,当连接成功时做如下工作Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1asio::async_read(socket_,asio::buffer(&m_packet,sizeof(m_packet)),2boost::bind(&tcp_connection::HandleReadCardKey,shared_from_this(),3asio::placeholders::erro
阅读全文
随笔分类 - STL/Boost學習
摘要:shared_from_this()是enable_shared_from_this<T>的成员 函数,返回shared_ptr<T>。首先需要注意的是,这个函数仅在shared_ptr<T>的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr<T>的 构造函数中设置。 如下代码是错误的:class D:public boost::enable_shared_from_this<D>{public: D() { boost::share
阅读全文
摘要:首先#include <gtest/gtest.h>,当然工程的头文件路径要设置正确1.简单测试TESTCpp代码#include <gtest/gtest.h> int Factorial( int n ) { if(n==2) return 100; //故意出个错,嘻嘻 return n<=0? 1 : n*Factorial(n - 1); } //用TEST做简单测试 TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出 { E
阅读全文
摘要:bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等 _1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。 绑定普通函数: C++代码 #include<boost/bind.hpp> #include<iostream> usingname
阅读全文
摘要:以boost::function和boost:bind取代虚函数boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost:bind取代虚函数的做法,这里谈谈我自己使用的感受。基本用途boost::function就像C#里的delegate,可以指向任何函数,包括成员函数。当用bind把某个成员函数绑到某个对象上时,我们得到了一个closure(闭包)
阅读全文
摘要:当我们使用函数时习惯于C函数的格式,即如下形式resulttype funname( arglist );返回值类型 函数名( 参数列表 );在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。为了解决这个问题,我们要使用Boost.Bind库Boost.Bind是一个函数对象工厂。他用来产生我们需要的函数对象。好了,有了它,你可以在你设计中大量使用Boost.Functi
阅读全文
摘要:#include<ctime>#include<iostream>#include<boost/bind.hpp>#include<boost/shared_ptr.hpp>#include<boost/enable_shared_from_this.hpp>#include<boost/asio.hpp>usingboost::asio::ip::tcp;std::stringmake_daytime_string(){usingnamespacestd;time_tnow=time(0);returnctime(&am
阅读全文
摘要:#include<ctime>#include<iostream>#include<string>#include<boost/asio.hpp>usingboost::asio::ip::tcp;std::stringmake_daytime_string(){usingnamespacestd;time_tnow=time(0);returnctime(&now);}int_tmain(intargc,_TCHAR*argv[]){try{boost::asio::io_serviceio_service;//新建一个asio::ip
阅读全文
摘要:#include<iostream>#include<boost/array.hpp>#include<boost/asio.hpp>//本程序的目的是访问一个时间同步服务器,我们需要用户指定一个服务器(如time-a.nist.gov),用IP亦可.usingboost::asio::ip::tcp;intmain(intargc,char*argv[])...{try...{if(argc!=2)...{std::cerr<<"Usage:client<host>"<<std::endl;retur
阅读全文
摘要:http://www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/using.html原文http://www.cppblog.com/firectrl/archive/2008/04/20/47638.html翻译
阅读全文
摘要:一般而言我们创建用于接收error的类型大多声明如下: boost::system::error_code error 我们用这个类型去接受在函数中产生的错误如socket.connect( endpoint, error);如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误boost::asio::error::host_not_found;通过if (error)检测到error后,抛出异常throw boost::system::system_error(error);需要注意的是,我们的error被 转化成 system_error了显示错误很简单了,st
阅读全文
摘要:char d1[128];size_t bytes_transferred = sock.receive(boost::asio::buffer(d1));buffer 大小是自动管理的同样std::vector<char> d2(128);bytes_transferred = sock.receive(boost::asio::buffer(d2));还可以基于boost::arrayboost::array<char, 128> d3;bytes_transferred = sock.receive(boost::asio::buffer(d3)); buffe
阅读全文
摘要:大家都希望可以像操作STL容器一样的去操作数组,C++可没有提供这个东西,有时候你会选择使用vector来替代,不过这毕竟不是个好的办法,毕竟vector模拟动态数组比较稳妥,而用它去替代一个普通的数组,开销毕竟太大了。而恰好,boost::array就为你提供了这个功能。boost::array的定义如下(简化):详情参见相关文件Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->template<class T, std::size_t
阅读全文
摘要:使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使用类对象——显然,这肯定会产生错误)。很好奇这个模板类的实现。先看看怎么使用:对一个类 A ,当我们希望使用 shared_ptr 来管理其类对象时,而且需要在自己定义的函数里把类对象 shared_pt
阅读全文
摘要:boost::format类提供了类似C语言里'printf'功能的格式化输出能力,当然功能更强大。所需头文件:#include <boost/format.hpp>示例代码:#include<iostream> #include<string> #include<boost/format.hpp> usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { //使用%序号%的方式给出指示符,后面用%连接对应的数据。 cout<<boost::format("w
阅读全文
摘要:转自:http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost
阅读全文
摘要:智慧 + 毅力 = 无所不能正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...boost::asio 的同、异步方式 转自:http://blog.csdn.net/zhuky/archive/2010/03/10/5364574.aspxBoost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include <boost/asio.hpp>名空间using namespace boost::asio;ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写
阅读全文
摘要:以前使用ACE实现Server框架,但是觉得太笨重,决定采用boost.asio来写服务器程序: 1.服务器构建在linux上面;当然也可以在windows下运行 2.io部分采用非阻塞模式、业务逻辑部分采用同步线程池实现 3.封装io操作及状态,用户应用程序无需关心io详细操作所以决定采用boost::asio框架来写服务器:boost::asio::io_service提供了核心IO功能、和异步IO对象,它包括: boost::asio::ip::tcp::socket boost::asio::ip::tcp::acceptor boost::asio::ip::udp::socket
阅读全文
摘要:boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include <string>#include <iostream>#include <boost/shared_ptr.hpp>class implementation{public:~implementation() { std::cout <<"destroying
阅读全文
摘要:1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. Let's BOOST THE WORLD . 2. 编译:VC2005注意在 属性->C/C++->预处理器->预处理定义 中加入 _CRT_SECURE_NO_DEPRECATE;来屏蔽不必要的警告 3. Asio 网络库Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库. 3.1. 网络库:VC2005注意在 属性->C/C++->命令行 中加入 -DBOOST_REGEX_NO_LIB来防止自动连接. 3.2. 同步Timer本
阅读全文