5

現在、Visual Studio 2008から2010に移行しています。私のソフトウェアは、BoostとそのTR1機能を多用しています。VC10には独自のTR1実装があるため、多くのコンパイラエラーが発生します。

_HAS_CPP0Xスイッチを使用してMicrosoftのTR1実装を無効にできることは知っていますが(ここを参照)、これによって将来興味深い可能性のある他の機能も無効になるかどうかはわかりません。

それで、私はTR1のより良い実装がどちらであるか疑問に思っています:BoostからのものかMicrosoftからのものですか?何か違いはありますか?Microsoftの実装を無効にすることには不利な点がありますか?

4

2 に答える 2

1

コードがVC10の標準ライブラリでコンパイルされない場合は、標準に準拠していないことを示している可能性があります。VC10の標準ライブラリはDinkumwareからのものであり、標準ライブラリの実装に関しては、これらの人は悪くありません。(PJPは以前はlibワーキンググループの議長でした。)将来互換性がない可能性がないように、VC固有の問題として却下する前に、各問題を詳しく調べます。

また、TTBOMK、VC10にはTR1だけでなく、C ++ 1x(たとえば、; ICBWTstd::shared_ptrの代わりに)が付属しているため、boostとVC10のライブラリは実際には完全には比較できません。std::tr1::shared_ptr

于 2010-08-17T21:33:51.813 に答える
0

最初に:
BoostとTR1を並べて使用できるはずです。すべてが正しく構成されていて、いじり回していないusing namespace場合は、エラーは発生しません。

C ++ 11は、Boostが提供できないautoキーワード(詳細)や宣言中のクラス属性の初期化(詳細)などの機能を提供します。

一方、Boostは、C++11機能の実装以上のものを提供します。Essentially Boostは、C++標準に追加されたと見なされるライブラリのコレクションです。

両方が提供する機能(shared_ptrなど)に関しては、Boostの使用をお勧めします。

  • Boostは、特定のC++11機能をサポートしないコンパイラでコンパイルします
  • C ++ 11(ほとんどのコンパイラは異なる実装)で中継するだけでなく、明確な依存関係があります
  • Boostデータ型(例:shared_ptr)は、シリアル化などの他のBoost機能と互換性があります。

私の提案は、どうしても必要な場合はC ++ 11を使用し、それ以外の場合はBoostを使用することです。

于 2013-08-17T08:50:45.263 に答える