﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-О ο o 虫子不乖 o ο О</title><link>http://www.cppblog.com/ornaking/</link><description>Keep hoping!
Keep trying!
Keep giving!  --- Always Be a Student!</description><language>zh-cn</language><lastBuildDate>Sat, 10 Jan 2009 03:45:47 GMT</lastBuildDate><pubDate>Sat, 10 Jan 2009 03:45:47 GMT</pubDate><ttl>60</ttl><item><title>C++名家对话 10</title><link>http://www.cppblog.com/ornaking/archive/2007/10/23/35036.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Tue, 23 Oct 2007 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/10/23/35036.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/35036.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/10/23/35036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/35036.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/35036.html</trackback:ping><description><![CDATA[<p>--------------------------------------------------------------------------------</p>
<p>那天一开始和以前一样没什么两样。 </p>
<p>　 我早早就起了床，抓紧时间看了一些技术文章，然后在食堂大厅里吃早饭，去换班的时候还提前了五分钟。这轮班本来就是例行公事，并没什么大事发生。但临近下班时，怪事发生了。距离换班整整还有十分钟，布拉森科沃斯基居然晃了进来，准备接我的班。 </p>
<p>　 真是太阳从西边出来了，布拉森科沃斯基干任何事情都不会提前。但我实在想不出今天他为什么提前。他查看了一些物件后，走过来对我说，&#8220;嗨！弗兰奈尔找你有事，回去时顺便弯一下她住的特等舱。&#8221; </p>
<p>&#8220;哦？什么事？&#8221; </p>
<p>　 &#8220;不知道，&#8221; 布拉森科沃斯基耸了耸肩。接着他又微微一笑，轻轻地拍了拍我的背。&#8220;你最好还是过去吧，&#8221;他补充道，&#8220;这里有我顶着。&#8221; </p>
<p>　 &#8220;是啊，轮到你了，&#8221;我表示同意，接着又叹了口气，出门而去。 </p>
<p>　 当我到弗奈尔的船舱里，门已经打开了。她招手让我进去，身后的门轻轻关上。她的客椅上已坐着另外一位男士。我以前好像没见过他。 </p>
<p>　 &#8220;嗨，嗨&#8221;他的声音很友好，站起来握我的手。 </p>
<p>　 &#8220;这是主管吉尔伯，&#8221;弗奈尔给我们介绍了一下，于是坐了下来。 </p>
<p>　 &#8220;听说您可以去圆屋帮助我们？&#8221;吉尔伯单刀直入。 </p>
<p>　 我看了弗奈尔一下：&#8220;是的，只要我能行。&#8221; </p>
<p>&#8220;哦，我想你肯定行，&#8221;吉尔伯信誓旦旦地说，&#8220;你原先是跟珍妮.卡露莎一块干的吧。是的，她现在在我的部门，而且她对你评价很高，对，非常高。我知道你现在负责的日常工作越来越多，&#8221;他接着说道，&#8220;但在研究现场工作更有挑战性。怎么样？感不感兴趣？&#8221; </p>
<p>　 &#8220;是的。这样很好。我已经要求参加更多跟研究有关的工作。&#8221; </p>
<p>　 &#8220;很好，很好。我相信薪水也很合适。是的，很合适。你当然明白在那里要呆上一段时间，至少等我们有能力恢复这几座建筑物和圆屋之间的正常交通。现在逼不得已才使用这个临时过道。&#8221; </p>
<p>　 他开始问我一大堆问题。我什么也不记得了。脑袋有点飘飘然，但还是高兴地意识到又可以见到珍妮了。真滑稽，我想，这和年轻时交上女朋友有点不一样，跟那时不太一样，那时我刚参加工作，很多年以前了&#8230;&#8230; </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>　 &#8220;肯定有更好的方法，&#8221;我咕哝着。 </p>
<p>　 &#8220;嗨，伙计，怎么了？&#8221;温迪愉快的嗓音在小屋里缠绕。我伸了伸腰决定暂停编码休息一会，于是地鼠般地弓起身来。 </p>
<p>　 &#8220;太好了，&#8221;我回答道，&#8220;你回来了？我以为你要出去两周呢？&#8221; </p>
<p>　 她白了我一眼：&#8220;你去哪里了，木星吗？我已经旅游两周并且度过了周末假！&#8221; </p>
<p>　 &#8220;开心的时候时间过得飞快，&#8221;我偷偷笑了笑。 </p>
<p>&#8220;哼，&#8221;她说道，&#8220;你跟安娜去哪儿了！知道吗？我告诉过你Guru的party会很有趣的，没想到你带着她女儿在外面泡。&#8221; </p>
<p>　 &#8220;诶，前几周我并不知道她是的Guru女儿，&#8221;我抗议道，&#8220;我以为她只是party的一个客人。&#8221; </p>
<p>　 &#8220;吃午饭时你慢慢告诉我。&#8221;她把雨靴塞到桌子下边又换上了便鞋。&#8220;还有，这里怎么了？我进来时气氛有点紧张。&#8221; </p>
<p>　 &#8220;好吧，拉一个椅子过来我会告诉你血淋淋的事实。说不定你有什么新的见解。&#8221;等温迪走进我的小屋，我又坐进椅子里。 </p>
<p>　 &#8220;我在我们的系统上实现一些通讯功能。使用一种很简单的协议。服务端只是返回一系列以逗号作定界符的带引号的字串。因为字串可以带引号，所以我写了一个简单的函数来处理字串，在字串两端加上引号，而字串内部的引号则作转义处理，就像这样，&#8221;我在白书写板上演示给她看： </p>
<p>Input<br>Output</p>
<p>field 1<br>"field 1"</p>
<p>field "with quotes"<br>"field \"with quotes\""</p>
<p>　 &#8220;我写了两个函数，一个用来加引号，另一个用来去掉引号： </p>
<p>std::string quote(const std::string &amp;);<br>void f(std::ostream &amp;o)<br>{<br>o &lt;&lt; quote("whatever");<br>}</p>
<p>std::string unQuote(std::string &amp;);<br>void g(std::istream &amp;i)<br>{<br>std::string input;<br>i &gt;&gt; input;<br>std::string original=unQuote(input);</p>
<p>// use string 'original' ...<br>}</p>
<p>&#8220;不错，很直截了当，&#8221;温迪答道，&#8220;这是典型的你用于文本文件解析器的思路。&#8221; </p>
<p>　 &#8220;是的，是很简单。但如果原始字串很长，我只好拷贝整个字串。我们的服务器软件必须很紧凑，因为它是在我们所制造的那些箱子里运行的。而且，项目组有些成员抱怨这样使用起来显得很笨拙，他们希望可以使用流插入和提取。像这样，&#8221;我用力地在白书写板上写出如下代码： </p>
<p>std::string message;<br>// aStream is an istream subclass<br>aStream &gt;&gt; message;</p>
<p>&#8220;我必须设法将文本放进aStream，再从中提取一个字段的内容到message中。我已经在流缓冲区里折腾了好半天，但还是不怎么行。&#8221; </p>
<p>　 &#8220;用操纵器。&#8221;听到Guru温和的嗓音时，温迪和我跳了起来。 </p>
<p>　 &#8220;什么？&#8221;我问。 </p>
<p>　 &#8220;写你自己的IOStream操纵器，就像Langer和Kreft刚在C++ Repot中所描述的那样[1]。&#8221; </p>
<p>　 &#8220;唔，你是说先知Langer和Kreft？&#8221;我问。 </p>
<p>　 &#8220;鲍勃在开会，我现在没有精力来充当Guru，&#8221;她耸了耸肩。即使她不摆出Guru的派头，我心里还是把她当成Guru。而且她总是在关键时刻神秘地出现！我开始怀疑她是否在附近布置了眼线。 </p>
<p>　 &#8220;啊，&#8221;我说，一边奇怪为什么我的回答总是如此软弱。&#8220;那么怎么写一个IOStream操纵器呢？&#8221; </p>
<p>　 &#8220;有两种方法，取决于你实现的操纵器有没有参数。如果你的实现中要处理一个参数，接下来我会完整地描述给你听。如果你还想知道怎样实现没有参数的操纵器，你可能得再翻翻以前的一些东西了。 </p>
<p>　 &#8220;实现带一个参数的操纵器实际上很简单。你只要简单地创建一个类，在其构造函数中接收适当的参数，并提供插入和提取操作符，操作符内部调用一些操作操纵器的成员函数。比如你要写一个ostream的操纵器来操纵一个整数，可以这样做。&#8221; Guru擦掉白书写板上的字，用她细长好看的字体整洁地写出如下代码： </p>
<p>class myManipulator<br>{<br>int manipValue;<br>public:<br>explicit myManipulator(int i) : manipValue(i) {} // Note it's 'explicit'!<br>friend ostream &amp; operator &lt;&lt;(ostream &amp;os, const myManipulator &amp;mm);<br>};</p>
<p>　 &#8220;使用操纵器很简单，就像使用std::setfill和std::width一样：&#8221; </p>
<p>　 &#8220;编译器将产生一个临时的无名myManipulator对象，使用42来初始化它。接着编译器调用重载的插入操作符。插入操作符对流执行必要的操纵，就像下面这样：&#8221; </p>
<p>ostream &amp; operator &lt;&lt;(ostream &amp;os, const myManipulator &amp;mm)<br>{<br>if (mm.manipValue == 42) {<br>os &lt;&lt; "Life, the universe, and everything";<br>} else {<br>os &lt;&lt; "What was the question, again?";<br>}<br>return os;<br>}</p>
<p>　 我想了一下。&#8220;那么&#8230;&#8221;我小心地问，&#8220;我的ostream操纵器可以使用字符转义和反转义吗？&#8221; </p>
<p>　 &#8220;你可以这么做，也可以分开两个不同的类来实现转义和反转义[2]，escape 及 unescape [2].&#8221;她突然停住了，露出了微妙的变化。这时，鲍勃走了过去，是要去咖啡屋。&#8220;记住，孩子，&#8221; Guru接着说，&#8220;多读、多想先知Kreft和Langer的文章。&#8221; </p>
<p>　 &#8220;是，老师，下午给你看我的结果&#8221;我回答。鲍勃停了下来，他的杯子掉在了地板地毯上。他拿起杯子，没有回头走了。当他在视野里消失之后，温迪，Guru和我交换了一下眼神。是的，我们就想达到这样的效果。 </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>　 主管吉尔伯可没想这么多，至少此时没有。过了一会他接下去说：&#8220;是，是的，你会做得很好。欢迎加入这个小组。&#8221; </p>
<p>　 我们握了握手，我张嘴笑了：&#8220;谢谢。我什么时候调您那边？&#8221; </p>
<p>　&#8220;什么？噢,你已经是了。不用担心行李。你的东西已搬到圆屋了。你值班时他们已经行动了，都办好了。 &#8221; </p>
<p>　 我还没明白过来，已经被带走进了一部停在中转站的轿车。吉尔伯还在愉快地小声交谈时，车门关上了，我们加速驶进了开往圆屋方向的通道。 </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/ornaking/aggbug/35036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-10-23 22:55 <a href="http://www.cppblog.com/ornaking/archive/2007/10/23/35036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好好学习 天天向上</title><link>http://www.cppblog.com/ornaking/archive/2007/10/23/35035.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Tue, 23 Oct 2007 14:54:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/10/23/35035.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/35035.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/10/23/35035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/35035.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/35035.html</trackback:ping><description><![CDATA[一个月的时间 不停的思考再思考<br>又重新看了好多书 好多牛牛们的blog<br>才发现自己是多么的"才疏学浅"<br>突然间意识到的无知 差一点毁掉了自己的信心<br>开始遗憾自己大学的四年时间了<br><br>---<br>不要以为自己属牛<br>以后就会很牛<br>只有好好学习<br>才是正道<br><br>努力吧 无知的孩子...<br>
<img src ="http://www.cppblog.com/ornaking/aggbug/35035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-10-23 22:54 <a href="http://www.cppblog.com/ornaking/archive/2007/10/23/35035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>呵呵,辞职了</title><link>http://www.cppblog.com/ornaking/archive/2007/09/12/32082.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Wed, 12 Sep 2007 15:49:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/09/12/32082.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/32082.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/09/12/32082.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/32082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/32082.html</trackback:ping><description><![CDATA[辞职了,反而感到轻松了<br>竟然没有担心工作的问题,呵呵~~~<br><br>一切似乎又都要从新开始, <br>不同的只是,<br>身体弱了些罢了~~~<br>
<img src ="http://www.cppblog.com/ornaking/aggbug/32082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-09-12 23:49 <a href="http://www.cppblog.com/ornaking/archive/2007/09/12/32082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原来好久没来了啊</title><link>http://www.cppblog.com/ornaking/archive/2007/09/08/31852.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Sat, 08 Sep 2007 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/09/08/31852.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/31852.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/09/08/31852.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/31852.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/31852.html</trackback:ping><description><![CDATA[好久没有来这里写东西了,看看上一篇Blog的日期,竟然是我刚开始工作的日子.<br><br>现在想想,在公司待着很没意思,整天做些不喜欢做的事情,<br>每天还都得加班,郁闷.<br><br>真怀疑自己能否能够撑到2008年.
<img src ="http://www.cppblog.com/ornaking/aggbug/31852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-09-08 20:16 <a href="http://www.cppblog.com/ornaking/archive/2007/09/08/31852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++名家对话 09</title><link>http://www.cppblog.com/ornaking/archive/2007/04/30/23253.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Mon, 30 Apr 2007 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/30/23253.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/23253.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/30/23253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/23253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/23253.html</trackback:ping><description><![CDATA[<p><br>　 我开始并没太在意，但过了第三天还没见到珍妮，才感到不妙。一阵犹豫与绝望之后，我去找弗奈尔。找她是很自然的，因为我和珍妮当时都向她汇报工作。 </p>
<p>　 当我敲第二下门的时候，房门打开了。&#8220;啊，是你，&#8221;她说。&#8220;什么事？&#8221; </p>
<p>　 &#8220;正在找珍妮，好几天没见她了。&#8221;我解释道。 </p>
<p>　 弗奈尔扫了我一眼，说：&#8220;啊，是的。她最近分配了新的任务。&#8221; </p>
<p>　 &#8220;是吗，她在哪里呢？&#8221; </p>
<p>&#8220;在圆屋，那里和发掘现场都需要添加人手。她一旦去了就必须呆在那里了。去那儿是受限制的，因为门锁和地道情况不太好，进出那儿要穿特制的服装，真是痛苦。&#8221; </p>
<p>　 &#8220;是不是很多人都重新分配了任务？这里好像以后要搬空的样子。&#8221;我所知道的就是自从几周前的爆炸事件后，主圆屋那边显然还是一直在装修。表面上我们在外边的楼层里继续自己部门的工作，实际上与内部失去了联系，圆屋内大范围的通讯设施都有故障而在维修。 </p>
<p>　 &#8220;有一些，&#8221;她说着靠在了门口边上。&#8220;为什么？如果需要你这样的，要我给你介绍进去吗？&#8221; </p>
<p>　 &#8220;当然，&#8221;我脱口而出然而又奇怪自己反应这么快。我这么惦记珍妮吗？或者我急着再见到她？不管怎样，感觉自己有点奇怪。 </p>
<p>　 如果珍妮被转移到圆屋，我想如果有机会我也会去。忽然想起了很多年以前的一天，当时我学习处理另一种形式的转移。有意思的是，当时我也遇到了访问限制的问题。 </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>　 正当温迪走过我的小卧室时，我正在大叫：&#8220;啊！我恨死非法访问了！&#8221; </p>
<p>　 挫折感太强烈了，我只想大喊大叫。然而我的声音终于烧焦般地减弱下去，最后变得和老鼠叫差不多了。 </p>
<p>　 这一切已经足够使温迪停了来看我了。&#8220;你还好吧，怎么回事，年轻人？&#8221;她的语调里带有一点爱尔兰口音。随着圣.帕特里克节的临近，她的一举一动越来越象爱尔兰人。 </p>
<p>　 &#8220;温迪，快帮我一个忙，&#8221;我叹了口气，&#8220;你用不着扮这副怪相，这里有一个怪人已经足够了。&#8221; </p>
<p>&#8220;喂，你还好吧？&#8221;她平静温和地说，&#8220;伙计，什么东西把你惹你这样？&#8221; </p>
<p>&#8220;啊呀，就是这些代码，我想可能和Guru有点关系。&#8221;我承认，&#8220;一开始我就被她吓得六神无主。我肯定她是从疯人院跑出来的。后来，我又有点喜欢她把我称作她的徒弟。是有点怪异，但也没什么大不了。但当我给朋友提起此事时，他们认为这是故意贬我。我再仔细回想一下，觉得他们说得没错。&#8221; </p>
<p>　 温迪笑了。&#8220;噢，&#8221;她说，&#8220;我明白了，事实上你没有从正确的着眼点去看待她。你应该去了解一下工作之外的她。&#8221;我试着想象她的家：架子上堆满了满是灰尘的电脑书和杂志；祭坛里烧着拜祭各位计算机科学家的香&#8230;&#8230;我的神情一定出卖了我的想法—温迪大笑起来，&#8220;她摆Guru的架子，主要是为了气气鲍勃，吓唬一下新手。我喜欢她这样子，否则她就活象一具僵尸了。&#8221; </p>
<p>　 &#8220;哦。&#8221;我并没有被说服。我不置可否，我觉得Guru的举动还是有点出格。，但我不想跟温迪争，于是叹了口气静下来回到那个问题上：&#8220;我矛盾了几个小时了。任务很简单—实际上就是重定向cout和cerr，把它们输出到文件中。&#8221; </p>
<p>　 &#8220;好，把你做的再跟我说一下。&#8221; </p>
<p>　 &#8220;我正在整合另一个组开发的库。这个库是以命令行（接口）的思路写出来的，所以所有的调试、诊断信息送到了cout与cerr。更糟的是我认为鲍勃在那个组，因为没有一个规则及原因说明何时信息送到cout何时送到cerr。实际上，有些信息分开送到两个流上！所以我要跟踪它们并把它们凑在一个log文件里。&#8221;</p>
<p>　 &#8220;总之，正如我说的，我在把它们整合到我们的图形用户界面（GUI）应用程序里。不幸的是，GUI直接扔掉了cout和cerr的输出。所以，我正做的就是将输出转向到一个文件里，实际上,简单吧，简单得我不知该怎么做，我对问题进行分析过滤后，写了下面的小程序。&#8221;我拉了把椅子让温迪在电脑旁坐下。 </p>
<p>#include &lt;iostream&gt;<br>#include &lt;fstream&gt;<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; std::ofstream logFile("out.txt");<br>&nbsp;&nbsp;&nbsp; std::cout = logFile;<br>&nbsp;&nbsp;&nbsp; std::cerr = logFile;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "This goes to cout\n";<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "This goes to cerr\n";<br>}</p>
<p>　 &#8220;程序在一个编译器上编译及运行没有问题，但换了个编译器就出了非法读取的错误。&#8221; </p>
<p>　 温迪看了看屏幕。&#8220;嗯&#8230;我不能确定你是不是可以那样重新分配数据流。&#8221; </p>
<p>　 &#8220;实际上，孩子，这样做显然极不自然明确地被神圣的标准所禁止。&#8221; </p>
<p>　 我们差点跳起来。不过怎么说，我得承认Guru总是神秘地在最恰当的时间出现。&#8220;所以，我这样做不行？&#8221;我叹道。 </p>
<p>　 &#8220;不，&#8221; Guru微笑道，&#8220;，实际上很简单，徒弟，你在大学里用什么编译器？&#8221; </p>
<p>　&#8220;噢，是一种很老的编译器，不支持标准的很多特性。&#8221; </p>
<p>　 Guru点点头。&#8220;我明白了。你的编译器应该在使用一种先知Langer 和 Kreft所谓的 经典输入输出流[1]。你肯定很熟悉标准输入输出流—尤其是流缓冲类。流缓冲不再是低级的实现上的细节；它现在是一个&#8230;完整的类。输入输出流的设计者，Jerry Schwarz 早就看到了流缓冲类将会成为一个极其有用的特性。然而它的价值和功能常常被忽略。&#8221; </p>
<p>　 &#8220;好吧。那我该怎么做呢？&#8221; </p>
<p>　 Guru拿起一枝干擦笔飞快地在白书写板上写下了如下的代码： </p>
<p>#include &lt;iostream&gt;<br>#include &lt;fstream&gt;<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; std::ofstream logFile("out.txt");<br>&nbsp;&nbsp;&nbsp; std::streambuf *outbuf = std::cout.rdbuf(logFile.rdbuf());<br>&nbsp;&nbsp;&nbsp; std::streambuf *errbuf = std::cerr.rdbuf(logFile.rdbuf());</p>
<p>&nbsp;&nbsp;&nbsp; // do the actual work of the program;<br>&nbsp;&nbsp;&nbsp; // GUI code and event loop would go here<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "This would normally go to cout but goes to the log file\n";<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "This would normally go to cerr but goes to the log file \n";<br>&nbsp;&nbsp;&nbsp; logFile &lt;&lt; "This goes to the log file\n";<br>&nbsp;&nbsp;&nbsp; // end of program body</p>
<p>&nbsp;&nbsp;&nbsp; // restore the buffers<br>&nbsp;&nbsp;&nbsp; std::cout.rdbuf(outbuf);<br>&nbsp;&nbsp;&nbsp; std::cerr.rdbuf(errbuf);<br>}</p>
<p>&#8220;rdbuf函数返回一个由基类basic_ios管理的流缓冲区的指针。重载版本允许你替换流缓冲区，返回值是原始的流缓冲区。解决方法很简单—用你的log文件的流缓冲区替换cout和cerr的流缓冲区。程序结束时，改回原来的流缓冲区。你可以看到，你仍能用logFile作为常规的输出文件。&#8221; </p>
<p>　&#8220;酷毙了！&#8221;终于看到了流缓冲区的威力。&#8220;嘿，如果我只想重定向一个流，比如cerr，我是不是可以简单地交换这两个缓冲区，这样就无须担心怎样恢复它们了，象下面那样 ：&#8221; </p>
<p>int main()<br>{<br>&nbsp;&nbsp;&nbsp; std::ofstream logFile("out.txt");<br>&nbsp;&nbsp;&nbsp; std::streambuf *saveBuf=cerr.rdbuf(logFile.rdbuf());<br>&nbsp;&nbsp;&nbsp; logFile.rdbuf(saveBuf);<br>&nbsp;&nbsp;&nbsp; // remainder of program...<br>}</p>
<p>　 &#8220;诶，并不这么简单，&#8221; Guru叹了口气 &#8220;这样的代码过不了编译关。basic_ios::rdbuf函数并不是虚拟函数。ofstream只提供了一个rdbuf函数，此函数没有参数，返回指向对象内部的文件缓冲流。也就是说std::ofstream::rdbuf(void) 隐藏了 std::ostream::rdbuf(std::streambuf *)。 </p>
<p>&#8220;你可以通过一个指向std::ostream的指针操纵你的log文件，如下：&#8221; </p>
<p>int main()<br>{<br>&nbsp;&nbsp;&nbsp; std::ofstream logFile("err.log");<br>&nbsp;&nbsp;&nbsp; std::ostream * baseManipulator = &amp;logFile;<br>&nbsp;&nbsp;&nbsp; baseManipulator-&gt;rdbuf(std::cerr.rdbuf(baseManipulator-&gt;rdbuf()));<br>}</p>
<p>　 这些代码能通过编译，但无法正常工作。神圣的标准并没有规定ofstream的具体实现方法。有可能某种编译器实现了ofstream的功能而忽略了ostream::rdbuf函数，直接操作文件缓冲流。标准没有要求ofstream::close调用ostream:: rdbuf来决定闭哪个缓冲。因为此函数总是返回指向ofstream对象内部的filebuf，ofstream总会关闭自己内部的filebuf对象，于是cerr就没有了有效的缓冲区。所以，你还是要恢复原来cerr的流缓冲区，main退出前加入如下： </p>
<p>std::cerr.rdbuf(baseManipulator-&gt;rdbuf());</p>
<p>&#8220;如果你想重定向cin的输入，你必须预防类似的事情，ifstream也是这样的。&#8221; </p>
<p>　 Guru转身准备离开了，又停住了说：&#8220;这周六我想请人到我家来。没什么特殊的，一个交际晚会。欢迎你和温迪，及你们各自的朋友前来。&#8221; </p>
<p>　 我开口正准备优雅的谢绝。&#8220;啊！&#8221; </p>
<p>&#8220;他的意思是他很乐意过去，&#8221;温迪笑得很甜。我的小腿被她踹了一下，痛得厉害，只能含泪无助地点点头。Guru微笑着飘然而去。 </p>
<p>　 我等Guru和疼痛都消失以后，对温迪大叫起来：&#8220;早晚修理你。&#8221; </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>　 &#8220;好啊，&#8221;我对弗奈尔说，&#8220;别忘了通知我一声。&#8221; </p>
<p>&#8220;好的&#8221; </p>
<p>　 我就要走了，又问了一句：&#8220;诶，林格没却那儿吗，我的意思是她和珍妮是搭档。&#8221; </p>
<p>　 &#8220;不，&#8221;弗奈尔说。&#8220;我们这里需要她。&#8221; </p>
<p>　 &#8220;谢谢。明天见。&#8221; </p>
<p>在下一个值班时，我核查了一下我允许看的职责花名册。名单很长，上面的名字各式各样。象Jupiter（木星）这样的名字归联合国管啊，所以这次任务肯定是联合国发起的。各个地方的人员都有，主要来自美利坚联合体和亚洲联盟，因为它们投入的科研经费最多。没有谁的名字被打个记号，表明已被重新分配任务。但我能看出哪些名字已不在花名册的日常值勤中了，他们肯定去别的地方了。 </p>
<p>　 我慢慢看下去，看得很安静。 </p>
<p>　 我终于发现了怪事：没有一个亚洲人被再分配到发掘现场或是圆屋。 <br></p>
<img src ="http://www.cppblog.com/ornaking/aggbug/23253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-30 17:11 <a href="http://www.cppblog.com/ornaking/archive/2007/04/30/23253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>放假了```</title><link>http://www.cppblog.com/ornaking/archive/2007/04/30/23252.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Mon, 30 Apr 2007 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/30/23252.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/23252.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/30/23252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/23252.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/23252.html</trackback:ping><description><![CDATA[哈哈```终于到五一了```终于有时间去做毕业设计了```<br><br>满打满算```上班也快一个月了吧```虽然只是培训而已```但是感觉却比平时在教室里上的课要好的多了```<br><br>如果没有毕业设计```那生活倒是轻松多了```嘿嘿```&nbsp;&nbsp; <br><br>"&nbsp;可恶的毕业设计 "<br><br>整整一个周没有动它了``` 以前写的那些也还没有集成起来``` 再加上要新添的东西```<br>估计这七天要有的忙了``` <br>可惜了```不能回家看老爸老妈了``` 等做完的吧``` 请个假回去&nbsp; :-)&nbsp; ```
<img src ="http://www.cppblog.com/ornaking/aggbug/23252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-30 17:09 <a href="http://www.cppblog.com/ornaking/archive/2007/04/30/23252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>难啊</title><link>http://www.cppblog.com/ornaking/archive/2007/04/26/22896.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Thu, 26 Apr 2007 11:31:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/26/22896.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/22896.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/26/22896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/22896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/22896.html</trackback:ping><description><![CDATA[<p><br>不知道是不是有很多事情在进行到一定阶段的时候都有一个瓶颈，总之我的毕业设计算是到了这么一个地步了吧。<br>总是感觉很难进行下去了。<br>DirectShow没有刚接触的时候感觉很难，后来有些接触了就觉的不怎么样了&#183;&#183;&#183;可拿到实际中来做项目的时候，才发现，并不像是想象中的那么简单了。<br><br>做网络部分的Fliter不知道怎么回事，总是不成功。 还得兼顾 rtp ， 麻烦。<br><br>不过但愿五一回来的时候能够交给导师一个雏形。<br><br>虽然现在在公司里面还不是做正式的项目，但是却已经感受到一定的压力了，也许和现在还要做毕业设计有关吧。<br><br>下个月出去看房子，早点出去，早点安静一下吧。</p>
<img src ="http://www.cppblog.com/ornaking/aggbug/22896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-26 19:31 <a href="http://www.cppblog.com/ornaking/archive/2007/04/26/22896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++名家对话(08)</title><link>http://www.cppblog.com/ornaking/archive/2007/04/26/22894.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Thu, 26 Apr 2007 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/26/22894.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/22894.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/26/22894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/22894.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/22894.html</trackback:ping><description><![CDATA[<p><br>轰。 </p>
<p>巨响自远方传来。感觉上的难受更甚于听觉上的。挖掘队又开始工作了。 </p>
<p>&#8220;我希望&#8230;&#8230;&#8221;珍妮只开了个头就又没声了。 </p>
<p>&#8220;我知道。&#8221;我埋头于工作中。过了好一会儿，我加了句：&#8221;我也希望能给家里发封信。但通讯系统必须很快恢复工作才行。&#8221; </p>
<p>&#8220;它们能工作，&#8221; 珍妮说道。 </p>
<p>轰，又一声巨响。 </p>
<p>&#8220;是的，但因为圆屋的系统已被破坏，它被限定为只在紧急事件时使用。我们现在没有被授权。这是合理的。&#8221;我随口答道。 </p>
<p>又一阵的沉默。最后，珍妮低声道：&#8221;啊。好吧，他们是这么说的，而现在不是这种情况？&#8221; </p>
<p>&#8220;对。这只是暂时禁止。我也不喜欢这样，但你肯定不认为他们在&#8230;&#8230;&#8221;现在是我没声了。 </p>
<p>轰。 </p>
<p><br>--------------------------------------------------------------------------------</p>
<p>&#8220;轰&#8221;。 </p>
<p>这就是粘在我的显示器上的便笺上所写的内容。是的，还有跟着一个文件名我知道这个文件－我稍前加到project中的一个工具类。便笺是用Guru特有的笔法写的，但我搞不懂它是什么意思。Guru不在，我无法问她。 </p>
<p>就在此时，温迪，我隔间的程序员，进来并坐到她位置上。我探起头，期望于她能明白便笺的意思。她看起来很憔悴，头枕在手上。 &#8220;你看起来有个疯狂的周末，&#8221;我冒昧道。 </p>
<p>她无力地点点头。&#8221;周五我回到家时，一氧化碳探测器在报警－煤气在泄漏。我们不得不在一个朋友家渡过周末，直到它修好。我几乎没有合眼－我一直在想，如果没装探测器的话会发生什么[1] 。&#8221; </p>
<p>&#8220;噢，真是千钧一发，&#8221;我同情道，并在纸上记下要仔细检查我的探测器。&#8221;每个人都好吧？&#8221;温迪点点头。我认为她需要分散一下思维，所以就向她提起这个便笺并问她是什么意思。 </p>
<p>&#8220;等一下，&#8221;她答道，&#8221;Guru将纸条留在你显示器上？&#8221;我点点头。 &#8220;My friend，&#8221;她说，&#8221;听起来象你当了一回鲍勃。&#8221; </p>
<p>我惊呆了。&#8221;你在开玩笑吧！&#8221;我脸色发白。Bob was the worst programmer ever鲍勃一直是最差的程序员，我一有机会就攻击他和他差劲的编程风格。 </p>
<p>温迪摇着她的头，一脸的严肃。 &#8220;没有。一直以来他是唯一收到这种神秘纸条的人，如果你也收到一个，你肯定做了一次坏孩子。让我们看一下源文件。&#8221;她转向计算机，登录并调出有问题的文件。 </p>
<p>我搬过一把椅子。&#8221;在我看来，这儿一切都没问题，&#8221;我一边说一边从她肩后看过去。 </p>
<p>温迪轻微地动了一下－她比我预料得更专注。&#8221;粗看之下没问题，&#8221;温迪同意。&#8221;也许和以前的版本比对一下会找到一些线索。&#8221;我注视着她使用版本控制系统显示两个版本间的区别。我注意到－我仍然在试图掌握最基本的checkin/checkout指令，而此时她立刻就调用了一个版本比对命令。我还在试图归类温迪念出的命令。 </p>
<p>&#8220;有了，这而有些说法，但很不关键，&#8221;她指着屏幕说。&#8221;你更改了类的数据成员。&#8221; </p>
<p>我凑到屏幕前。 &#8220;是的，我小小地调整了其实现，我将标识对象位置的3个分开的double合并为一个double数组。它使得一些成员函数更具效率。但这些成员都是私有的，看到了吗？&#8221; </p>
<p>class Point<br>{<br>private:<br>&nbsp;&nbsp;&nbsp; double location[3]; // x, y, z coordinates.<br>public:<br>&nbsp;&nbsp;&nbsp; void setLocation(double x, double y, double z) { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location[0]=x; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location[1]=y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location[2]=z;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; void getLocation(double &amp;x, double&amp; y, double &amp;z) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=location[0]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y=location[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z=location[2];<br>&nbsp;&nbsp;&nbsp; }<br>};</p>
<p>就在这时，我注意到比较器显示文件顶部的一个空行被修改了。&#8221;为什么显亮这一行？&#8221;我嚷起来。 </p>
<p>&#8220;也许是空格变化，&#8221;温迪猜测。&#8221;那么，让我们设置为忽略空格。&#8221;在一些击键动作后，于是&#8230;&#8230;这一行仍然处于显亮状态。我将光标定位到这一行，并按下&#8221;End&#8221;键－骇人听闻的事情出现了。缩进到最右边的出乎常理地，是这样一条语句： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define private public</p>
<p>温迪和我互相看了一下。. &#8220;鲍勃！&#8221;我们齐声道。 </p>
<p>鲍勃，就在此时,正向我们走来。Guru不是唯一&#8221;说曹操就曹操到&#8221;的人。&#8221;嗨，新来的，&#8221;他说道，&#8221;我正巧路过，就来看一下你是否已经改好了问题。&#8221; </p>
<p>我闭上眼并数十。慢慢地。然后，又数回零。我举起便笺：&#8221;你说的是这个问题？&#8221;我轻快地问道。 </p>
<p>&#8220;嗨。是的，就是这个。她莫名其妙地将这个留在我的显示器上。当你将x、y和z改到数组中时，它搞砸了我大部分代码，所以我把它传给了你。改掉它，从现在起再别乱搞了，可以吧，新来的。&#8221; </p>
<p>&#8220;鲍勃，这个#define语句是什么意思？&#8221;我指着那行讨厌的代码。 </p>
<p>&#8220;哦这个，&#8221;鲍勃呵呵笑了。 &#8220;很酷的，不是吗？我的代码需要直接访问相关数据。高效，, y'know你知道的。起先，我只在我自己的代码中使用这个#define语句，但我一直这么使用，所以很自然地就把它加到你的头文件中了。我要处理非常多的数据运算，所以不能承受你提供的访问函数的开销。但当你用数组取代了单独的double时，我的代码&#8216;轰&#8217;了。&#8221; </p>
<p>&#8220;鲍勃，实际上。&#8221;好象事先约好的一样，我们听到了Guru的声音。我们都跳了一下。她用手指推了一下鼻子上的眼镜。&#8221;而且，你对编程原则的曲解&#8221;她指责道，&#8221;是我留便笺在你显示器上的原因。你试图搅乱访问控制的行为打破了类的封装。你在代码中将private改为public的行为违背了One Definition Rule。你必须将你的代码改为使用访问函数。&#8221; </p>
<p>&#8220;我已经说过了，我不能承受访问函数的开销，亲爱的,&#8221;鲍勃辩解道。&#8221;我必须－&#8221; </p>
<p>&#8220;不要说了！&#8221; Guru打断了他&#8221;访问函数是内联的，不会造成开销。&#8221;鲍勃试图反驳，但Guru阻止了他。&#8221;那么，为了避免所有的流言[2]，我们用测试来证明访问函数的实际代价。在此期间，清理掉那些不象样的代码。然后研读并思考1 Meyers 20[3]。&#8221; </p>
<p>鲍勃嘟囔着走向他自己的房间。Guru静静地站着，直到他已经走了，然后领着我回到我自己的房间。 </p>
<p>&#8220;徒弟，&#8221;她轻柔地说道，&#8221;请写一段测试代码来计算直接访问的开销，和inline的访问函数以及非inline的访问函数进行对比。要确保非inline的访问函数处理的位于其它的编译单元中。While you are at it, an inline operator [] would be useful.而inline的operator []会有帮助。&#8221; </p>
<p>我想了一下。&#8221;你是这个意思吗？&#8221;我写出： </p>
<p>class Point<br>{<br>public:<br>&nbsp;&nbsp;&nbsp; inline double operator[] (int index)&nbsp; const {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return location[index];<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>};</p>
<p>&#8220;很好，徒弟。你记住了正确使用const的法则。但现在，这么写它将不只是一个访问函数，还有个很好的mutator（变异）函数。你能从这个函数得到什么额外的好处？&#8221; </p>
<p>我想了一会儿。&#8221;可以在下标上进行越界检查。&#8221;我修改了一下： </p>
<p>class Point<br>{<br>public:<br>&nbsp;&nbsp;&nbsp; inline double &amp;operator[] (int index) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assert(index &gt;=0 &amp;&amp; index &lt;= 2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return location[index];<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>};</p>
<p>&#8220;嗨，漂亮吧！&#8221;这个，我喜欢。&#8221;这个越界检查在release版本中没有任何性能开销。&#8221; </p>
<p>Guru点点头。&#8221;并且，&#8221;她又说道，&#8221;使用一个优化能力很强的编译器时，能生成和直接访问成员同样高效的代码，而又兼具着封装及其安全性。&#8221; </p>
<p>&#8220;所以，&#8221;我思索着，&#8221;实在没有理由存在公有数据成员，是吧？&#8221; </p>
<p>Guru在回答前停了一下。 &#8220;在绝大多数情况下，没有理由。然而，如果一个类仅仅是一个便利性的数据聚合体，而不是对象模型－也就是说，C风格的struct，只有数据而没有额外行为－那么将所有数据置为公有是合理的 [4]。&#8221; </p>
<p>&#8220;你可以通过访问函数和mutator函数将私有成员暴露出去－但只在它真的有必要时。多余的Get和Set函数－包括此处的operator []－表明你没有认真考虑封装。当测试表明访问函数真的存在运行期开销时，你可以通过将它们实现为inline来提高速度。当然，所得的提高因编译器而异－所以需要测试。&#8221; </p>
<p>&#8220;我明白了，老板，&#8221;我高兴地回答。她笑了，拢着手静静地走开了。我坐下来写好了测试代码。其结果,至少就我所使用的编译器而言，非常有趣[5] ： </p>
<p>&nbsp;Approximate run-time in milliseconds&nbsp; <br>Implementation&nbsp; Optimizations off&nbsp; Optimizations on&nbsp; <br>1: direct access&nbsp; 1061&nbsp; 251&nbsp; <br>2: inline accessor function&nbsp; 1673&nbsp; 240&nbsp; <br>3: out-of-line accessor function&nbsp; 1662&nbsp; 1432&nbsp; </p>
<p>--------------------------------------------------------------------------------</p>
<p>轰。 </p>
<p>&#8220;我不喜欢这样，&#8221;珍妮重复道。&#8221;他们说圆屋因为一起意外的内部爆炸而被破坏，所以我们不能去那儿，但那儿的工作还在继续，有着更高许可的人被允许进入并且没有出来过。他们说远距通讯设施被破坏，并限定只供紧急状态下使用，但我能看到的唯一结果是我们不能和近木星空间的其他任何人联系。&#8221; </p>
<p>&#8220;是吗？&#8221; </p>
<p>&#8220;我不喜欢这样。&#8221; </p>
<p>轰。 </p>
<p>我们又有一段时间没说话，最终远处的轰鸣也停止了，但得到的寂静比烦躁的噪音更难受。left.过了一会儿，珍妮皱起眉头，站起来离开了。 </p>
<p><br>--------------------------------------------------------------------------------</p>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/ornaking/aggbug/22894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-26 19:23 <a href="http://www.cppblog.com/ornaking/archive/2007/04/26/22894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于找到工作了</title><link>http://www.cppblog.com/ornaking/archive/2007/04/12/21740.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Thu, 12 Apr 2007 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/12/21740.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/21740.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/12/21740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/21740.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/21740.html</trackback:ping><description><![CDATA[正式不容易啊&#183;&#183;&#183;好不容易有了个工作 &#183;&#183;&#183;<br>&nbsp;这几天一直在公司培训标准化&#183;&#183;&#183;也好久没有做毕业设计了&#183;&#183;&#183;<br>等下个星期找个理由每个星期请天假&#183;&#183;&#183;再加上周末和晚上的时间&#183;&#183;&#183;<br>呵呵&#183;&#183;&#183;时间应该够了吧&#183;&#183;&#183;<br><br>谷歌输入法看来也并不是那么好使&#183;&#183;&#183;<br>似乎不如紫光&#183;&#183;&#183;
<img src ="http://www.cppblog.com/ornaking/aggbug/21740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-12 22:10 <a href="http://www.cppblog.com/ornaking/archive/2007/04/12/21740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(文件|文件夹)传输</title><link>http://www.cppblog.com/ornaking/archive/2007/04/03/21195.html</link><dc:creator>ornaking</dc:creator><author>ornaking</author><pubDate>Tue, 03 Apr 2007 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/ornaking/archive/2007/04/03/21195.html</guid><wfw:comment>http://www.cppblog.com/ornaking/comments/21195.html</wfw:comment><comments>http://www.cppblog.com/ornaking/archive/2007/04/03/21195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ornaking/comments/commentRss/21195.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ornaking/services/trackbacks/21195.html</trackback:ping><description><![CDATA[奋斗了两天终于把文件传输搞完了```<br>很早以前以为这些都是很厉害的技术了```<br>现在才知道原来这些都是很简单的东东```<br>很奇怪的感觉```<br><br>很简单的一个软件 , 只能传文件和文件夹, 其他的什么也作不了, 也不指望它作些什么```<br><br>写完了才知道```原来它也可以给自己传文件```哈哈```(说笑了```)<br><br><a title=http://www.cppblog.com/Files/ornaking/FileTransfer.zip href="http://www.cppblog.com/Files/ornaking/FileTransfer.zip" target=_blank>http://www.cppblog.com/Files/ornaking/FileTransfer.zip</a><br><br>
<img src ="http://www.cppblog.com/ornaking/aggbug/21195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ornaking/" target="_blank">ornaking</a> 2007-04-03 21:57 <a href="http://www.cppblog.com/ornaking/archive/2007/04/03/21195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>