最近重新学习C++, 这东西自从上过这门课后很少用过, 除了数据结构, 算法偶尔用来写写代码段, 都是用C#写程序,  用习惯了.NET的一套完善的框架, 突然要学习使用C++颇有些不习惯, 首先是语法比C#复杂的多, 一本Thinking in C++全部都是在讲语法.. 看了几天也看了一大半, 感觉很爽, 学到了很多原来不知道和不清楚的东东.
不过标准C++的类库相比.NET BCL的完善程度真不是一个档次的, 获取一个时间需要用到<ctime>或者<windows.h>中的函数, 而.NET中的一个DateTime就能完成所有你想做的事情.

写代码写的不爽吧,于是乎就想用C++来"做"BCL里的一些类, 先用Win32API的时间API写了个DateTime类, 不过好像也没什么意义吧, 因为GetLocalTime函数本身就返回了一个够用的struct, 但是BLC的DateTime类的其他方法要用C++实现写起来也够累人的.看到member-function-pointer那里, 我又想写个Delegate, 没花多少时间就搞定了基本的功能, 主要用了template, 但用起来还像模像样的哈:
 

    People dap;

    dap.name = "Dap";

    dap.Hungry += People::HungryEventHandler(EatApple);

    dap.Hungry += EatPear; //yep! one dotnet 2.0 feature

    cout << dap.WantToEat();

.NET的精髓所在是它的managed框架, 如何来实现那个Object类才是最关键的, 在CLR眼里, 它知道每个对象(引用)真正的对象是什么, 类型是什么, 而在C++里, 最通用的只有一个void*, 什么都不知道的指针, 如何去控制一个对象的scope完全都需要程序员来控制. 仅仅从托管这个角度来讲, .NET框架真的是软件开发的一个重大进步, 但为什么用它来开发的人还是比较少呢, 性能是个大问题, 人们都不愿意使用十几甚至几十分钟来下载安装.NET Framework(最新的3.0 RC1有40多M = =#)..Windows Vista也几乎仍然是使用C++开发. .NET是个好东西, 无论从理念还是从到现在类库完善程度来看. 如果几年后电脑的性能完全可以忽略JIT的编译延迟的话. 软件开发首选必然是.NET...

说着说着就走题了.. 我只是想说我要学C++...

另外, 无意发现一个使用C++来实现的模拟.NET Framework类库, 叫ACF(Another C++ Framework), 是一个中国人写的, 实现了基本的.NET功能:

  • Basic type system
  • Exceptions
  • Arrays and collections
  • Delegates and events
  • Strings and text
  • I/O
  • Threading
    最新的版本是0.4(作者好像已经有两年没有继续开发了, 介绍中还说这个类库能发挥C++的template特性, 殊不知~咱已经有Generics了). 我已经下了它的Source, 但是Build的过程会有两三处error, 估计是因为VC++编译器版本的问题, 有的地方要加上一个"template<>", 有的地方要注释掉, 这个根据它生成时的错误改就好了. 好东西..研究ing..

    ACF的主页是 http://acfproj.sourceforge.net/ 
  • Posted on 2006-10-15 20:56  Adrian H.  阅读(458)  评论(1编辑  收藏  举报