All Stories

Boost::any实现分析

  在看《Conversations》的时候,看到有一章,专门讲到了Boost::any,不禁又勾起我对Boost的敬佩之情。  打开any.hpp,看到any类的实现非常简单,2个构造函数,1个拷贝构造函数,2个赋值运算符重载,1 个指针类型的成员变量,以及几个辅助函数。可正是这样一个简单的类,实现了极为巧妙极其方便的功能。看看C++对COM中的Variant的封装,把各种 想得到的数据类型都嵌入到union中,同时需要一个附加字段来指定当前实际的数据类型,代码看起来不但臃肿冗余,而且也不好用。  来看看any的实现代码,首先它是被放在boost名字空间的,其次,any当然不是一个模板类,不然在对不同的数据类型实例化后,不能方便地以统一的类型表示了: class any { public: // structors any() : content(0) { } templatetypename ValueType> any(const ValueType & value) : content(new holderValueType>(value)) { } any(const any & other) :...

今天去买衣服了

  呆在家里实在有点不甘心,总是想出去,不留在屋里就好。于是跑到华强北去买衣服,夏天快来了,需要准备一下了,从上衣到裤子,还了鞋子,都要买。2点到的华强北,因为没吃早饭和中饭,所以就先去麦当劳吃了4个鸡翅和1包薯条,喝了杯可乐。然后逛到茂业,运动品牌的T恤实在是贵啊,只好去买JSW的,51块钱还能买2件。再去买鞋子,Puma有几个款式的我倒是喜欢,但没有大码的,没办法,最后只好去买了双Nike的比较休闲的。  买鞋子的时候,xcc和他女朋友也来了,买完鞋子就三个人一起去电脑市场。又去买硬盘了,呵呵,比阿菲买的时候又便宜了一些。然后又去买U盘,一直逛到5点多。我和xcc去梅林吃饭,他女朋友则回去了。说起来,从我生日过后,都没跟xcc一起吃饭了。吃完后,又去他家里坐了一会儿。

源代码高亮的Html化工具

  想起要写些关于Boost源代码的东西,要把代码贴到blog上来,不免想要弄稍微好看点,虽然有个Boost中自带的演示Boost::regex的cpp2html工具,不过觉得太单调了点。上Google搜索了一下,还是能搜索不少来,其中一个放在GNU上的source-highlight引起了我的注意,这是一个由Lorenzo Bettini编写的命令行程序,能支持好多种语言的源代码输入,同时又支持包括Html、XML、LaTeX、DocBook等格式的输出。看到最新版本已经是2.6了,不过作者已经不屑于发布Windows下的可执行文件了,只好去sf.net的GnuWin32工程里找了一个2.1.2版本用用。这个小程序做得挺灵活的,作为输入的源文件规则和作为输出的目标格式都是通过外部的配置文件来说明的,这样如果要添加支持新的语言,只要添加新的配置文件就可以了,不需要修改重新编译程序。这是个很棒的小程序!  小丫头现在都知道怎么骗我了哦,真让我感动得想哭,突然觉得这种感觉就像《Hunter X Hunter》里奇犽的哥哥说他妈妈哭了,因为奇犽现在都会砍她了,她好感动的。

asio会合入Boost吗

  今天在各处blog闲逛,发现有谈到asio的,这个在很早前就听说过,Boost想要合入一个网络应用开发库,于是提到了asio。以前这方面只听说过ACE,但想想也知道不可能把ACE合入Boost,一是,ACE太大了,源代码压缩的体积超过现在所有Boost库的合集,再则ACE的实现方式跟Boost的风格截然不同。  看到asio已经到了可以实用的阶段,我也索性再多看几眼。asio和其它的Boost库一样,只有头文件,而且唯一的依赖就是C++标准库和现有的Boost库。看了看从CVS取出的最新Boost代码,里面已经有asio了,但文档只有用BoostBook格式的,从它的官方网站上看到还是有html格式的,还是比较完整的,像是用doxygen生成的,照我说来,Boost里的众多库帮助文档的风格太不一致了,连表现方式都不一致,有的是html的,有的是BoostBook的,有的是man的,不过虽说不一致,它们的内容还算是详细的,但像asio做的,好像没有其它的了。  以后要是Boost有个日志库了,那就可以彻底不用ACE了,呵呵。不过还不知道asio什么会被合入进来呢,最近在maillist上也好像没有特别提到这个库啊。

学习一下设计模式

  今天跟同事谈起我看过的C++方面的书,说到《C++设计新思维》,我说只看过前面7章,后面的几章因为涉及到设计模式了,我又不懂设计模式,就看不下去了。同事说,设计模式一定要懂啊,对写程序很有用,设计好了,再怎么绕也不会出错。想想也算是有点道理吧,回到家,看到沉睡多时的GoF《设计模式》一书,不禁有点感慨,想当年在学校,确实也是精力旺盛,还特地从图书馆借出来复印了整本书,不过当时大概也是水平不够,大部分内容基本上看不懂,根本不能理解作者的意图。后来进了公司,从另一位同事那买了本二手的,书保养得很好,大概他也没怎么看过吧,毕竟要能从头到尾把23种设计模式都玩熟了,对人本身的基础要求就比较高,一般要么是程序设计狂热爱好者,要么是肩负架构设计重任的架构师,其他角色的人,实在提不起多少信心吧,呵呵。  这次下决心了,在6月底之前,至少要把书完整看完一遍,对23种模式有个大概的了解。  白天在公司实在无所事事啊,又发呆了一天,虚度光阴啊!把Boost的帮助文档打包成了一个CHM文件,也挺无聊的。我现在对技术方面,只对C++还残留着些许的兴趣,而且主要是泛型编程方面。两大宝藏STL和Boost是必须要研究的东西,所谓不光是技术的宝藏,更是思想的宝藏,呵呵。回家看了看Boost的maillist,有人决心要做一个日志库,这让我觉得有点高兴。我就很需要一个好用的日志库,以前看过ACE里的,觉得很好,不过一来ACE这个库太大了,二来不知道为什么我在和VCL混用的时候,编译就会出错,后来就再也没碰过了。曾经也冒出过“自己写一个”的想法,不过实在不是很实际啊,看了maillist上他们的讨论,要做好一个日志库真的有很多超出预计的困难,就等他们了,嘿嘿。  另外还有件事,今天才发现,newsgroup上很多人都在学习C++下一个标准中的特性了,现在大概只有gcc 4.x的某些alpha版本能支持一些特性,但人家确实也写出了那样的代码了,tr1的内容赫然列在maillist上。于是又想当一回追星族,翻了几大C++网站,包括Bjarne的网站和C++标准委员会的网站,搜罗了一堆建议、草稿,准备好好研究一下。这样想想,我们国内的技术水平大概永远也赶不上国外吧,那样的大师怎么也不会出在中国大陆吧,唉。

LLYF Articles W.I.P #1

  突然决定做这个东东,主要功能是用来收集各种零散的文字,比如从网页上看到的有价值的文字片段等。不过让我决心做这东东的,却不是这个原因,而是想通过这玩意,能自动把分散在众多文件夹中的boost帮助文档打包成有序的,至少是能按照物理文件存放的分级打包成chm格式。  先要写一个能递归查找文件的功能,再按这种目录结构写成HtmlHelp的index文件。还要注意能剔除掉空的文件夹。

GFW是越来越过分

  所谓道高一尺,魔高一丈。虽然blogspot.com不停地被GFW封掉,但当时还有pkblogs.com和inblogs.net来作转向。可是现在,连它们两个也惨遭毒手了,GFW真是越来越过分了。不过它没有过分到像几年前那样,把google也封掉,所以为了突破GFW的封锁,在 google上搜了一遍,还真找到一些方法。  这些方法的只限于如何访问blogspot.com,因为实际上,后台blogger.com好像一直没被限制。其实比较好的方法是,自己弄个域名来转向。还有个方法是,用BloggerSpaces的服务。不过有更简单好用的方法。一个是利用 google的translate服务,先翻成繁体中文,再翻成简体中文,损失不是很大,只是要用一个长长的URL,以及对用非中文表示的文字,中间的空格都会被删掉,影响原意,还有个缺点是,当鼠标光标移动到文字上方时,会自己选定一段文字,弹出一个消息框来,比较烦人。再有一个方法,就是改浏览器设置。先把这段代码保存到文件(假设为c:\proxy.pac): function FindProxyForURL(url,host) {   if(dnsDomainIs(host, ".blogspot.com")) {     return "PROXY 72.14.219.190:80";   }}  以Firefox为例,打开Firefox,依次点击Tools->Options->Advanced->Network- > Settings...->选中Automatic proxy configuration URL,在下面填写:file:///C:/proxy.pac。这要,就可以直接用missdeer.blogspot.com来访问啦。如果是IE,也是类似,Tools -> Internet Options -> Connections -> LAN settings -> Use automatic configuration script, 再指向文件,要填成file:///C:\proxy.pac。  唉,不过这样的方法都只有我自己知道了,真是悲哀啊,只能自娱自乐了。...

这里真的成了写日记的地方了

  用missdeer.blogspot.com这个域名访问不了这里好多天了,然后改成用pkblogs.com,这样坚持了一段时间,终于也不行了,换用inblogs.net,最后也不行了。呵呵,算了,反正本来就没什么人看,就当是写日记的地方好了,自己写了自己看,呵呵。  小妞要在Excel里计算一个东西,我不知道有没有方便的方法,反正用VBA写个宏是可以的,不过还是花了我一点时间。  唉,不能太堕落啊。

我的blog近3年

  早上虽然醒过来了几次,但还是坚持睡到了11点半才起来,这对于我来说,从工作以来是很少见的,而且居然做了个美梦。经常有人说,梦里发生的事和现实中的正好相反,仔细想想,其实好像没什么道理,倒是这样被说了后,有心理暗示罢了。  也不吃中午饭,又想起前些天在玩TeX,下午就把CSDN上的Blog的内容全用LaTeX做成了PDF格式,虽然很多想要的功能没有找到实现方法,但也已经很有趣很好玩了。现在才知道怎么在CCT的环境下做书签,先要使用hyperref宏包,加几个选项后,只能用dvipdfm来转换,而且开始先得用latex编译一把,再用gbk2uni转换一把,再用latex编译一把,最后用dvipdfm来转换成PDF文件,这样就可以做出中文的书签了。  再来说csdn上的blog,那是我第2个blog,第1个是放在blogdriver上的,因为当时csdn上好像还没有,而看到有个当时在csdn社区很有点名气的gigix在blogdriver上建了blog,我也就去建了个,写过十几二十来篇的样子吧,开始出现了一次问题,打不开我的页面,跟网站维护人员反映了一下后就弄好了。过了些日子,又打不开了,这次再给他们反馈,他们却没像第一次那样马上弄好,而是拖了好多好多天,也不知道是什么时候弄好的,反正没等它恢复,我决定把blog迁移到csdn上,因为当时对csdn还是很抱有好感的。没想到csdn的blog系统太太太不稳定了,我写了100多篇后,持续了两年,主要是在学校期间使用,工作后,也用了快半年,实在忍受不了了,刚好遇到这个blogger.com被解封。blogger.com上的空间是早就开了的,只是当时只觉得老是打不开,还不知道有GFW这回事,所以一直用csdn的,而这里刚好情形反过来了,当然也是考察了一些其它的BSP的,比如MSN的,Blogsome的,国内的ChinaUnix的,最后还是决定放这里了。所以正式点的说法,这是我的第3个blog,虽然也遇到了再次被GFW,但只要还能通过某些不正当手段访问或发文,我是不会搬了。  把csdn上的blog内容copy下来,也当是个纪念吧!只是blogdriver好像访问不了了。