Visual Studio 2012发布的那一天我就把它搞到手了。新的C++ IDE真的是劲爆了,写代码的感觉毫不亚于C#。我最喜欢的部分是智能补全和着色部分。如今C++的宏被渲染成屎红色,类型被渲染成屎绿色,参数被渲染成屎灰色,这样基本不需要要编译,看着颜色都知道有没有写对。智能补全已经赶超VAX,而且还实现了“缩写过滤”,譬如说输入PNT就可以在弹出列表里面显示所有大写字母为PNT的对象(譬如说ParsingNodeTransition)等等。这样做的好处是,我只要打有限几个字符就可以补完一整句了,输入速度大大提高。
所以我升级了几乎所有工程。文档生成部分由于还在使用DIA100,所以暂时没有升级到2012,不过这是迟早的事情。不过这次升级遇到了几个小问题。
第一个是,对于没有capture任何外部变量的lambda expression,它可以隐式转换成一个函数指针。这个功能VS2010是没有的,结果升级了之后造成了我几个重载函数的问题,不过解决这个东西还是很简单的,只要把lambda表达式先保存在一个vl::Func变量里面就好了。
第二个是WICImagingFactory。在Windows SDK 7.0里面,CLSID_WICImagingFactory指向了WIC的唯一一个版本。在Windows SDK 8.0里面,出现了CLSID_WICImagingFactory1和CLSID_WICImagingFactory2,并且CLSID_WICImagingFactory等于CLSID_WICImagingFactory2。问题就来了,Windows 7里面并没有WICImagingFactory2,结果我CoCreateInstance就是败了。一开始觉得很奇怪,后来想了想,直接用VS那强大的Go To Definition功能跳到了定义CLSID_WICImagingFactory的地方,然后发现了这个事情。因此我就把代码改成了,如果sdk用的是高级版本,就强制使用1.0的。
VS2012对模板语法的检查更加严格了。以前还可以写typename A<T>::B<T>,现在不行了,得写成typename A<T>::template B<T>。其实后面那个才是标准的,而且VS2010也支持。只是VS2010也允许你省略template。
VS2012对于C++的改进已经跟C#几乎一模一样了,而且VS2012还支持C++的单元测试项目。总的来说,我十分喜欢。
posted on 2012-08-30 05:29
陈梓瀚(vczh) 阅读(10986)
评论(25) 编辑 收藏 引用 所属分类:
C++