青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

cyt
發(fā)現(xiàn)自己是越來(lái)越懶了,竟然原來(lái)有大半年沒(méi)有寫(xiě)blog。

今天是中秋節(jié),先祝各位看官中秋節(jié)快樂(lè)、人月兩團(tuán)圓!!!!

這大半年什么都干了半桶水:javascript、HTML、servlet、JSP、php、python、COM……雖說(shuō)干得不精,但也有一點(diǎn)點(diǎn)收獲……

C++論壇當(dāng)然還是討論回C++。
首先推薦一本書(shū):
《Exceptional C++ Style》Herb Sutter著
Her Sutter的多篇著作都被視為C++開(kāi)發(fā)的經(jīng)典教本。這本書(shū)跟《Exceptional C++》的不同在于更多地討論style。作者根據(jù)自己的經(jīng)驗(yàn),對(duì)C++的編寫(xiě)提出了很多準(zhǔn)則。作者對(duì)這些準(zhǔn)則的來(lái)龍去脈說(shuō)得清清楚楚,為什么要這樣做,不做會(huì)有什么后果,在什么編譯器下面準(zhǔn)則有什么不同的表現(xiàn)等等……比某人出版的C++規(guī)范,提出一堆無(wú)關(guān)痛癢不知所云的規(guī)則來(lái)的實(shí)在得多。
看完以后回顧一下自己之前的代碼,簡(jiǎn)直汗顏,重新燃起重寫(xiě)的沖動(dòng)……
再說(shuō)一件小事,就在看完這本書(shū)的若干天后,忽然發(fā)生一件奇事。某個(gè)程序一直編譯運(yùn)行都好好的。這天換了編譯環(huán)境,程序運(yùn)行不斷core dump,gdb跟了一下是說(shuō)某個(gè)exception沒(méi)有catch,但是代碼里面明明寫(xiě)了catch的,為什么抓不住呢。幸好看了這本書(shū)(不是賣(mài)廣告,汗),第13條……中間有某個(gè)函數(shù)的異常聲明不正確。簡(jiǎn)單說(shuō)就是函數(shù)1聲明會(huì)拋出異常A和B,但函數(shù)1里面調(diào)用了函數(shù)2,函數(shù)2會(huì)拋出異常C。于是,在調(diào)用函數(shù)1的時(shí)候盡管聲明了cacth異常C也無(wú)濟(jì)于事,C就是不能處理。(這個(gè)不是所有編譯器的標(biāo)準(zhǔn)行為)

另外收集了幾個(gè)C++ lib
QuickFunctor 看名字就知道是Functor的lib。用來(lái)做functor,signal/slot當(dāng)然不在話(huà)下。有趣之處在于它實(shí)現(xiàn)了一些boost::bind的功能(不依賴(lài)boost,但可以和boost、loki、TR1等一起使用)。給些例子會(huì)清晰一點(diǎn):

struct Car
{
    
string make;
    
string model;
    
int mpg;

    Car(
const string& make, const string& model, int mpg) : make(make), model(model), mpg(mpg) {}
};

void findCars(vector<Car>& v, const Functor<bool (Car&)>& test)
{
    vector
<Car>::iterator it;
    it 
= partition(v.begin(), v.end(), test);

    cout 
<< "found " << it - v.begin() << " result(s):\n------------------\n";
    
for (vector<Car>::iterator it1 = v.begin(); it1 != it; ++it1)
    {
        cout 
<< (*it1) << endl;
    }
    cout 
<< "**************************************\n";
}

bool hasTdi(const string& s)
{
    
return string::npos != s.find_first_of("TDI");
}

    cout 
<< "Cars that have at least 23 mpg\n";
    findCars(v, mkF(
&Car::mpg) >= 23);

    cout 
<< "Cars that have the mpg between 23 and 41\n";
    findCars(v, mkF(
&Car::mpg) >= 23 && mkF(&Car::mpg) <= 41);

    cout 
<< "Toyotas that have at least 25 mpg\n";
    findCars(v, mkF(
&Car::make) == "Toyota" && mkF(&Car::mpg) >= 25);

    vector
<Car>::iterator it;
    it 
= find_if(v.begin(), v.end(), mkF(hasTdi).comp<1>(mkF(&Car::model)));
    
//  mkF(hasTdi).o(mkF(&Car::model)) is a shortcut for the test above
    cout << "A car that has TDI: " << (*it) << endl;

個(gè)人覺(jué)得比boost的簡(jiǎn)潔一些。不過(guò)boost的bind加上的lambda實(shí)在是無(wú)敵。


另外收藏一個(gè)lib是rapidxml 其特點(diǎn)就是完全是C++ header,lib本身不需要編譯,除了STL不需要其他的lib,STL風(fēng)格的接口。還有一個(gè)是我最想要的,對(duì)XML內(nèi)容的訪問(wèn)可以通過(guò)引用方式,不需要額外分配內(nèi)存。舉例說(shuō),假如有一個(gè)char * p指針,并分配了一大片內(nèi)存空間,在里面保存了XML的完整內(nèi)容。經(jīng)過(guò)parse后,我想獲得其中一個(gè)node的內(nèi)容,那我可以選擇一種方式,直接引用p所指向的內(nèi)存中的一部分來(lái)獲得node的內(nèi)容,而不需要重新分配一段空間來(lái)保存。
以往我一直選用CMarkup作為C++的parser,目的就是圖他簡(jiǎn)單。現(xiàn)在發(fā)現(xiàn)rapidxml后,發(fā)現(xiàn)rapidxml似乎比CMarkup簡(jiǎn)單易用,更重要的是rapidxml完全開(kāi)源,不像CMarkup那樣還要分不同的license。對(duì)于簡(jiǎn)單的訪問(wèn)XML,覺(jué)得這個(gè)rapidxml足夠了。

asio 說(shuō)到網(wǎng)絡(luò)的異步響應(yīng)框架,首先想到的就是ACE的proactor。但是個(gè)人一直覺(jué)得ACE是在有愧于C++,C語(yǔ)言的痕跡太深了,估計(jì)是“出道”太早的緣故。boost類(lèi)庫(kù)遲遲沒(méi)有thread、socket方面的lib放出。asio似乎可以填補(bǔ)了這兩個(gè)空白。asio基于boost,類(lèi)庫(kù)的風(fēng)格以及提供的接口也跟boost十分相似。還是給段例子實(shí)際:
#include <ctime>
#include 
<iostream>
#include 
<string>
#include 
<boost/bind.hpp>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/enable_shared_from_this.hpp>
#include 
<asio.hpp>

using asio::ip::tcp;

std::
string make_daytime_string()
{
  
using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  
return ctime(&now);
}

class tcp_connection
  : 
public boost::enable_shared_from_this<tcp_connection>
{
public:
  typedef boost::shared_ptr
<tcp_connection> pointer;

  
static pointer create(asio::io_service& io_service)
  {
    
return pointer(new tcp_connection(io_service));
  }

  tcp::socket
& socket()
  {
    
return socket_;
  }

  
void start()
  {
    message_ 
= make_daytime_string();

    asio::async_write(socket_, asio::buffer(message_),
        boost::bind(
&tcp_connection::handle_write, shared_from_this(),
          asio::placeholders::error,
          asio::placeholders::bytes_transferred));
  }

private:
  tcp_connection(asio::io_service
& io_service)
    : socket_(io_service)
  {
  }

  
void handle_write(const asio::error& /*error*/,
      size_t 
/*bytes_transferred*/)
  {
  }

  tcp::socket socket_;
  std::
string message_;
};

class tcp_server
{
public:
  tcp_server(asio::io_service
& io_service)
    : acceptor_(io_service, tcp::endpoint(tcp::v4(), 
13))
  {
    start_accept();
  }

private:
  
void start_accept()
  {
    tcp_connection::pointer new_connection 
=
      tcp_connection::create(acceptor_.io_service());

    acceptor_.async_accept(new_connection
->socket(),
        boost::bind(
&tcp_server::handle_accept, this, new_connection,
          asio::placeholders::error));
  }

  
void handle_accept(tcp_connection::pointer new_connection,
      
const asio::error& error)
  {
    
if (!error)
    {
      new_connection
->start();
      start_accept();
    }
  }

  tcp::acceptor acceptor_;
};

int main()
{
  
try
  {
    asio::io_service io_service;
    tcp_server server(io_service);
    io_service.run();
  }
  
catch (std::exception& e)
  {
    std::cerr 
<< e.what() << std::endl;
  }

  
return 0;
}

暫時(shí)不清楚asio的性能如何。ACE經(jīng)過(guò)千錘百煉,無(wú)數(shù)的應(yīng)用實(shí)踐,其地位不是這么容易動(dòng)搖。但asio的封裝方式是否值得ACE效仿呢。
posted on 2007-09-25 12:16 cyt 閱讀(2686) 評(píng)論(4)  編輯 收藏 引用
Comments
  • # re: 中秋節(jié)快樂(lè)
    夢(mèng)在天涯
    Posted @ 2007-09-25 15:13
    LZ是用c++做網(wǎng)絡(luò)的嗎,以后多向你學(xué)習(xí)~!  回復(fù)  更多評(píng)論   
  • # re: 中秋節(jié)快樂(lè)
    zcpro
    Posted @ 2007-09-26 17:38
    asio已經(jīng)被并到boost里了,還在修改,沒(méi)有完成  回復(fù)  更多評(píng)論   
  • # re: 中秋節(jié)快樂(lè)
    小豬
    Posted @ 2007-09-29 14:59
    弱弱的問(wèn)一句: rapidxml 修改了節(jié)點(diǎn)之后,怎么保存數(shù)據(jù)?
      回復(fù)  更多評(píng)論   
  • # re: 中秋節(jié)快樂(lè)
    cyt
    Posted @ 2007-10-27 09:49
    to zcpro:我也看到了asio說(shuō)加入boost,不過(guò)boost的標(biāo)準(zhǔn)包里面還沒(méi)有看到它的蹤影。當(dāng)年spirit也有這樣的現(xiàn)象。估計(jì)加入boost大家庭“手續(xù)”還是挺麻煩的。

    to 小豬:我暫時(shí)還沒(méi)有用到保存,我也只是暫時(shí)用到讀取部分。遲點(diǎn)用到的時(shí)候我再回復(fù)你吧。
      回復(fù)  更多評(píng)論   

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品高潮久久| 亚洲网在线观看| 亚洲人成久久| 欧美激情片在线观看| 亚洲破处大片| 亚洲欧美成人一区二区在线电影 | 国产午夜精品一区理论片飘花 | 日韩一级精品视频在线观看| 欧美喷水视频| 亚洲一区二区综合| 卡一卡二国产精品| 日韩天堂av| 国产欧美一区二区精品性色| 久久久久一本一区二区青青蜜月| 亚洲国产导航| 性欧美超级视频| 亚洲电影中文字幕| 欧美三区不卡| 久久精品日产第一区二区| 亚洲国产成人精品女人久久久| 中文日韩电影网站| 黄色综合网站| 欧美日韩一区二区三区免费 | 亚洲欧洲精品成人久久奇米网| 欧美人在线观看| 欧美在线观看视频在线| 亚洲激情国产| 久久久久久精| 亚洲一区二区三区久久| 极品少妇一区二区三区| 欧美日韩一区二区三区| 久久久久久久一区二区三区| 日韩亚洲欧美一区| 欧美国产在线电影| 欧美一级欧美一级在线播放| 亚洲三级免费电影| 黄色成人av网| 国产精品久久久久久久久搜平片 | 亚洲欧美激情视频| 亚洲电影视频在线| 国产日本欧美一区二区三区| 欧美激情亚洲一区| 久久男女视频| 午夜精品久久久久久久99水蜜桃| 亚洲日本免费| 欧美激情aⅴ一区二区三区| 欧美一区二粉嫩精品国产一线天| 99re8这里有精品热视频免费| 国产亚洲一本大道中文在线| 欧美午夜久久久| 欧美国产高清| 老鸭窝亚洲一区二区三区| 久久9热精品视频| 亚洲欧美变态国产另类| 一本一本a久久| 亚洲美洲欧洲综合国产一区| 亚洲第一福利在线观看| 麻豆91精品91久久久的内涵| 久久国内精品视频| 性xx色xx综合久久久xx| 亚洲综合精品四区| 亚洲一区二区三区涩| 一区二区欧美视频| 夜夜嗨av一区二区三区四区 | 国产精品日韩在线| 欧美丝袜一区二区| 欧美日韩中文| 欧美视频官网| 欧美日韩一区免费| 欧美日韩在线免费视频| 欧美日韩一区二| 欧美日韩亚洲一区二区三区在线 | 欧美一级片在线播放| 午夜精品久久久久久久久久久| 亚洲性视频网址| 亚洲欧美日韩天堂一区二区| 午夜欧美精品| 久久久久国产精品一区三寸| 久久国产视频网站| 久久久久久久久久久久久9999| 久久久久网站| 欧美高清一区| 欧美日韩精品一区二区| 欧美四级剧情无删版影片| 国产精品久久久久天堂| 国产精品永久| 精品二区视频| 亚洲福利视频专区| 日韩一级裸体免费视频| 亚洲一区在线免费| 久久精品在这里| 美女精品国产| 亚洲日韩成人| 亚洲一区免费| 久久精品夜色噜噜亚洲aⅴ| 美女脱光内衣内裤视频久久影院| 欧美成人午夜免费视在线看片| 欧美精品一区二| 国产精品久久久久久久久久免费 | 亚洲国产精品高清久久久| 亚洲毛片一区二区| 亚洲欧美乱综合| 另类尿喷潮videofree| 亚洲国产一区在线观看| 亚洲天堂成人| 久久蜜桃资源一区二区老牛 | 国产精品国产三级国产a| 国产亚洲福利社区一区| 最新热久久免费视频| 亚洲综合日韩中文字幕v在线| 久久精品国产精品亚洲| 亚洲国内欧美| 午夜在线电影亚洲一区| 欧美成人中文字幕| 国产精品羞羞答答| 亚洲欧洲精品一区二区| 性欧美videos另类喷潮| 91久久国产综合久久| 午夜精品一区二区三区在线| 美日韩在线观看| 国产日韩欧美亚洲| 9色精品在线| 久久综合色播五月| 亚洲一二三区精品| 欧美极品欧美精品欧美视频| 国产网站欧美日韩免费精品在线观看| 亚洲精品日韩在线| 久久久午夜精品| 在线综合视频| 欧美精品在线视频| 伊人成综合网伊人222| 亚洲欧美中文日韩在线| 亚洲人人精品| 米奇777超碰欧美日韩亚洲| 国产拍揄自揄精品视频麻豆| 一区二区三区|亚洲午夜| 欧美国产精品v| 欧美一区二区高清在线观看| 欧美日韩性生活视频| 亚洲精品乱码视频 | 亚洲人在线视频| 久久婷婷人人澡人人喊人人爽| 国产日本欧美一区二区| 亚洲一区二区三区四区在线观看| 亚洲国产精品福利| 老司机免费视频一区二区| 国产无一区二区| 欧美伊人久久大香线蕉综合69| 日韩午夜av电影| 欧美日本在线看| 亚洲精品乱码久久久久久按摩观| 欧美69wwwcom| 久久亚洲电影| 亚洲第一区中文99精品| 免费成人你懂的| 久久久综合网站| 一区二区视频免费在线观看| 久久精品亚洲乱码伦伦中文| 亚洲欧美网站| 国产亚洲制服色| 久久久久久久97| 久久久久久国产精品mv| 一区二区三区自拍| 欧美成人性网| 欧美成人一区二区在线| 亚洲精选久久| 99国产精品久久| 国产精品久久久久久久久免费樱桃| 一区二区三区毛片| 在线视频欧美日韩| 国产精品美女久久久久久久| 欧美一区2区三区4区公司二百| 亚洲欧美综合网| 好看不卡的中文字幕| 农村妇女精品| 欧美激情精品| 亚洲欧美日本国产专区一区| 亚洲欧美韩国| 激情视频一区| 亚洲动漫精品| 欧美新色视频| 久久精品免费播放| 久久夜色精品国产欧美乱| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩在线免费| 欧美主播一区二区三区| 久久久久久黄| 一区二区三区四区五区精品视频| 在线亚洲一区| 激情欧美一区二区三区| 亚洲激情小视频| 国产精品免费观看在线| 狼狼综合久久久久综合网| 欧美高清在线精品一区| 午夜精品免费| 美女日韩在线中文字幕| 亚洲综合精品一区二区| 久久久久久网址| 在线视频欧美日韩|