2012-04-06 115 views
7

我正在使用C++主要用於它的核心組件的產品。雖然它使用visual C++作爲Windows平臺的主要編譯器,並且它是編輯器和調試器作爲主要開發環境,但不使用任何Microsoft特定技術。對於其他平臺,它使用gcc進行編譯。遷移到C++ 11

我的代碼庫大量使用模擬右值引用(使用boost移動庫),可變參數模板(使用boost處理器)以及某些情況下的表達式模板。

我很想改用C++ 11來使用右值引用,完美轉發,默認和刪除構造函數,可變參數模板以及自動和decltype來獲得更乾淨的代碼庫。如果我這樣做,我可能會對現有代碼進行一些修改以簡化它(使用模板別名並可能是constexpr)。在這種情況下,我必須使用mingw切換到gcc for windows平臺,因爲visual studio沒有默認和刪除的實現,並且可變參數模板。此外,我必須切換到gdb作爲調試器和一個不同的代碼編輯器。 (對於Android等平臺),調試(從Visual Studio遷移到gdb,因爲我們爲Visual Studio調試器開發了許多可視化工具)對於我來說,在代碼簡單性和性能方面, )和代碼編輯器(不是那麼多的大量模板代碼,我沒有發現自動完成,重構等很多用途,並且codelite,codeblocks,qt creator與我們的構建系統運行良好)是一些問題。

我想知道是否有中/大型項目(商業或開源)正在使用/打算使用上述任何C++ 11功能?做這種遷移需要多少努力?

任何實踐經驗,智慧提示或文字都會幫助我做出決定。

+1

建議和列表問題通常不是Stack Overflow處理的內容。 – 2012-04-06 07:54:23

+1

我建議您再等一會兒。等到適當的VC++支持。 mingw32中的頭文件有問題。 – 2012-04-06 07:54:50

+0

看看他們在存儲庫中有[C++ 11 Migrator] [1]的clang項目 [1]:http://blog.llvm.org/2013/04/status-of-c11- migrator.html – Alex 2013-06-03 06:50:09

回答

7

首先:它取決於政策。

就像所有的技術一樣,從有效的東西切換到新的東西本身就是一種風險。根據你的想法和對項目的批評,你接受的風險程度可能會有所不同(例如,我使用Clang的樹版本的頂部用於個人項目,但在工作中使用成熟的gcc)。

就個人而言,我會建議而不是爲生產準備項目潛水頭,而是逐步選擇適用的功能。

您mentionned:

  • 右值引用&完美轉發
  • default/delete
  • 可變參數模板
  • 類型推斷(auto/decltype
  • 模板別名和constexpr

VC++ 11自帶support for many C++11 features。例如,您現在可以開始使用右值引用類型推斷。如果我記得正確的話,那些可以與gcc 4.5.x分支一起使用,這已經超過一年了,如此之好。

一個值得注意的例子是lambda,它們都被VC++ 11和gcc支持。

如果你想進一步移動,那麼你將不得不切換編譯器和環境。由於你需要重新訓練球隊,所以這個努力要明顯得多(個人而言,我有一些在gingw上使用gdb的疣)。

我會建議櫻桃採摘什麼適用於這兩個編譯器,現在,除非你覺得冒險。儘管如此,遷移始終是商業風險。