15

BOOST_FOREACHBoost ライブラリのユーザーに、提案された新しい C++ 標準 (別名 C++0x) への移植性のためにコードを準備するために何をしているのか (もしあれば) を尋ねるように促されました。たとえば、 を使用する場合、次のようなコードを記述しますかshared_ptr

#ifdef CPPOX
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif

名前空間の問題もあります - 将来的には , 名前空間shared_ptrの一部になりstdます - どのように対処しますか?

これらの質問に興味を持ったのは、弾丸をかじってブーストを真剣に学び始めることに決めたからです。また、自分のコードでベスト プラクティスを使用したいと考えています。

正確には答えの洪水ではありません - これは問題ではないということですか? とにかく、答えてくれた人に感謝します。私は何もしないようにアドバイスされるのが好きなので、jalfsの回答を受け入れています!

4

5 に答える 5

14

簡単な答えは「何もしない」です。Boost は、0x に採用されたライブラリを削除するつもりはありません。したがって、boost::shared_ptr は引き続き存在します。したがって、移植性を維持するために何もする必要はありません。

もちろん、0x ができたら、多くのコードを単純化し、クリーンアップし、最適化することができますが、まだここにないため、その作業を実際に開始することはできません。できることは、0x がヒットしたときにコードがコンパイルされることを確認することだけです...そして、そのようにする必要があります。Boost はライブラリの半分を削除するつもりはありません。(私は推測していません。彼らは以前にメーリングリストでこれを述べました)

(そして、標準のshared_ptrに切り替えたい場合は、時が来たら単純な検索/置換を行う方がおそらく簡単だと思います。#include <boost/shared_ptr.hpp>#include <memory>およびboost::shared_ptrに置き換えますstd::shared_ptr

またはもちろん、Boost の を使い続けるプロジェクトを決定することもできますshared_ptr結局のところ、標準ライブラリに追加されたからといって、それを使用する必要があるわけではありません。

于 2009-04-04T11:21:17.340 に答える
2

名前空間のため、何もする必要はありません。ブースト実装を使用する場合でも、ブースト名前空間を使用します。

以前のバージョンとの互換性をこれほどまでに破壊しようとは思わないでしょう。

ここで私の以前の同様の質問を参照してください: C++0x が主流になると、ブーストのオーバーラップ部分はどうなりますか?

しかし、もちろん、コード内で名前空間を頻繁に使用する場合、重複する定義がいくつかある可能性があります。使用するたびに名前空間を明示的に指定することに戻る必要があります。

于 2009-04-04T11:36:02.890 に答える
2

C++0x と Boost の間で共有部分を使用する最良の方法は、Boost.TR1 を使用することです。テクニカル レポートが既に承認されている場合は実装。Boost.TR1 は、利用可能な場合はコンパイラによって提供される実装を使用し、それ以外の場合は Boost によって提供される実装を使用します。これがBoost.TR1の主な目標でした

「TR1 ライブラリは、標準ライブラリ拡張に関する C++ テクニカル レポートの実装を提供します。このライブラリ自体は TR1 コンポーネントを実装していません。むしろ、標準ライブラリの TR1 実装 (ある場合) を含むシン ラッパーです。それ以外の場合は、 Boost Library に相当するものを含め、それらを名前空間 std::tr1 にインポートします。」

于 2010-05-01T14:09:12.717 に答える
1

いいえ、次の事実を考えると、まだありません。

  • C++0x のサポートは、さまざまなプラットフォーム間でまだ標準に達していません (必要です)。
  • まだ正式に標準として宣言されていないこと

しかし、はい、Boost は必要に応じて使用します (ただし、もちろん、リリースがサニテーション フェーズを通過した後にのみ使用します)。使用する他のサードパーティ ライブラリと同様です。また、必要に応じてソース形式を使用します。

ただし、製品設計段階で駆動原理をより厳密に採用するための努力があります (例: move-ctor など)。

C++0x が標準化されると、何らかの作業が行われることは間違いありません。しかし、それにはいくつかの新しいコンパイラ (vc10?) に移行する必要もあり、新しいコンパイラに移行することは常に独自のタスクです。

于 2009-04-04T11:10:15.900 に答える
1

Boostバージョンを長期間使用することを常に好むかもしれません。特に、複数のプラットフォームでコンパイルする必要がある場合。

Boost ライブラリは、複数のプラットフォームで移植およびテストされており、そこでも同じように動作します (ほとんどの場合)。

新しい C++ ライブラリの最初のベンダー実装には、STL と std 名前空間が追加されたときと同じように、小さなバグとパフォーマンスの違いがまだ含まれている可能性があります。

于 2009-04-07T15:26:38.567 に答える