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++的單元測試項目??偟膩碚f,我十分喜歡。
所以我升級了幾乎所有工程。文檔生成部分由于還在使用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++的單元測試項目??偟膩碚f,我十分喜歡。