UWP之C++/CX開發

公司老闆比較看重UWP的市場前景,需要我們現在去做技術積累。由於筆者以前都是做c++開發的,所以想使用c++做UWP開發,初始時只是發現UWP中C++開發資料很少,由於也不太懂UWP,所以前期使用C#做開發(資料比較多)。熟悉一段時間後(自認爲對UWP有了一定的瞭解了),想看看使用C++開發如何。生成一個C++項目後,發現我用new生成一個對象都會出現,提示不支持new操作,要使用new^。覺得很不可思議呀,怎麼會改動如何之大呢。在網上找了資料看看,發現原來這又是微軟給提供的坑。大家可以看一下原文。

最近裝了VS11Beta,才關注有關WinRT的信息。C++這次又被微軟“擴展”了,新名字叫C++/CX。

C++/CLI是微軟爲了讓C++代碼能夠在.Net上運行所做的嘗試(誰還記得Managed C++),C++/CX是爲了讓C++程序員能在WinRT上“輕鬆”地一展身手所做的擴展。

現在C++/CX的資料非常少,Google上搜索一下,頭條就是Inside the C++/CX Design,是微軟Visual C++團隊的一個哥們寫的。看他的照片,一臉苦逼樣,就知道他被C++折磨得非常不爽。

他的文章中也是充滿了痛苦。爲了迎合微軟的COM技術(爲什麼微軟老是抱着COM不放)和WinRT的模型,他們嘗試了各種方法,例如寫一個完全符合C++標準的純類庫(WRL),但是發現這個類庫使用還是非常不方便,因爲寫一個COM組件是非常麻煩的事情,必須有很多工具配合。如果沒有Visual Studio,我估計不會有多少人願意寫COM組件。於是他們再一次擴展了C++(有點類似ATL
Attributes),編譯器會自動生成很多代碼來把一個類搞成COM兼容,例如自動生成uuid,各種藉口定義等。當然一切都是native的代碼,並不涉及類似.Net的託管問題。

當然,文章很短,評論纔是經典。國外的程序員們也表達了他們的憤慨,以及對於微軟Visual
C++團隊改語言癖好的不滿。很多人認爲即使是編譯器自動生成代碼,使用標準C++語法已經足夠了,根本不用再去搞擴展。

只有C++程序員才能體會,對於擴展C++的強烈反感。C++的一個特點就是,自己跟自己不兼容,一旦有新特性,就要花費很多精力去把這個新特性和已有特性結合,而且很多情況下,這種結合會產生很多問題和陷阱。

我現在還沒有搞清楚,他們說WinRT算是一個和.Net並行的新一代開發平臺,底層由C++實現,上層可以由多種語言使用;您看,現在C++自己的平臺,居然還要把自己折磨成這樣才能使用,您說C++糾結不糾結?

話說C++11出來,新特性很多,讓本來就複雜的C++更進一步——以後誰要是學C++,那得從C開始,到面向對象,到模版,到STL,到其他標準庫(輸入輸出、正則表達式、線程等等),哪一個都不是能輕鬆搞定的。沒準還要注意C++各種陷阱和最佳實踐,於是要看(More)Effective
C++(STL)等書。沒準還要知道C++的工作原理才能裝成高手,於是就要看C++對象模型。還有高手鑽研C++標準嗎?

以前寫個C++類,稍微有點複雜度,就要提供構造、析構、拷貝、賦值函數(copy assignment),現在還要加上另一個賦值函數(move
assignment),才能讓這個類有比較正常的行爲。考慮繼承,則需要考慮多重繼承的影響,是否virtual繼承,使用public、protected還是private繼承。寫個方法就要考慮是否virtual,是否pure,最後pure
virtual的析構函數居然還得提供實現。在實現實際的功能之前,爲了符合C++的語義環境,很多時間都得花在這些瑣碎之事上。

C++這個本來就很複雜的東西,卻被微軟一而再,再而三地擴展,來適應微軟同樣很複雜的COM技術。想到這裏,誰都有一種去學C#的衝動。隨便看一本C#編程教材,使用VisualStudio,我們就可以開發WinForm,ASP.Net,WPF,Silverlight,可以編寫組件,可以找工作。

C++/CX,是C++在新一代Windows環境中的爆發,還是在新一代Windows環境中的滅亡?這個是問題。

看了後得出的結論是,果斷放棄CX,還是老老實實用C#做開發吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章