7

主にコア コンポーネントに C++ を使用する製品に取り組んでいます。Visual C++ を Windows プラットフォームの主要なコンパイラとして使用し、エディタとデバッガを主要な開発環境として使用していますが、Microsoft 固有のテクノロジは使用していません。他のプラットフォームでは、コンパイルに gcc を使用します。

私のコード ベースは、エミュレートされた右辺値参照 (Boost move ライブラリを使用)、可変個引数テンプレート (Boost プロセッサを使用)、および場合によっては式テンプレートを頻繁に使用します。

C++11 に切り替えて、右辺値参照、完全転送、コンストラクターのデフォルトと削除、可変個引数テンプレート、および auto と decltype を使用して、よりクリーンなコード ベースを取得したいと思っています。

そうする場合は、既存のコードを簡素化するために手直しを行う可能性があります (テンプレート エイリアスとおそらく constexpr を使用)。その場合、mingw を使用して Windows プラットフォーム用の gcc に切り替える必要があります。これは、Visual Studio にはデフォルトと削除、および可変個引数テンプレートの実装がないためです。また、デバッガーと別のコード エディターとして gdb に切り替える必要があります。

私にとっては、コードのシンプルさとパフォーマンスの点でメリットが非常に大きいように見えますが、安定性、可用性 (Android などの一部のプラットフォームで)、デバッグ (Visual Studio デバッガー用に開発された多くの視覚化ツールがあるため、Visual Studio から gdb への移行) とコードエディター (大量のテンプレート コードではなく、オートコンプリート、リファクタリングなどの使用はあまり見られず、Codelite、Codeblocks、QtCreator はビルド システムでうまく機能します) が問題の一部です。

商用またはオープンソースの中規模/大規模プロジェクトで、上記の C++11 機能のいずれかを使用/使用する予定があるかどうかを知りたいですか? また、そのような移行を行うにはどのくらいの労力が必要ですか?

実際の経験、ヒント、または知恵の言葉は、私が決定を下すのに役立ちます.

4

1 に答える 1

7

まず第一に、それはポリシーに依存します。

すべてのテクノロジーと同様に、機能するものから新しいものに切り替えること自体がリスクです。あなたの考え方とプロジェクトの批判によって、受け入れるリスクの程度は異なる場合があります (たとえば、個人的なプロジェクトでは Clang のトップ オブ ツリー バージョンを使用しますが、仕事では成熟した gcc を使用します)。

個人的には、本番環境のプロジェクトに真っ向から取り組むのではなく、機能する機能を少しずつ選択することをお勧めします。

あなたが言及した:

  • 右辺値参照と完全転送
  • default/delete
  • 可変長テンプレート
  • 型推論 ( auto/ decltype)
  • テンプレートのエイリアスとconstexpr

VC++11 には、多くの C++11 機能のサポートが付属しています。たとえば、今すぐ右辺値参照型推論を使い始めることができます。そして、私が正しく思い出せば、それらは gcc 4.5.x ブランチで使用できます。これはすでに 1 年以上前のもので、よく着用されています。

リストに含まれていない注目すべき機能の 1 つは、ラムダなどです。これは VC++11 と gcc の両方でサポートされています。

さらに先に進みたい場合は、コンパイラと環境を切り替える必要があります。チームを再トレーニングする必要があるため、労力は大幅に大きくなります (個人的には、mingw の gdb でいくつかのいぼがありました...)。

冒険的な気分でない限り、今のところ、両方のコンパイラで機能するものを厳選することをお勧めします。ただし、移行は常にビジネス リスクです。

于 2012-04-06T08:03:29.057 に答える