117

気づいたときはboost::lexical_cast「なんでもっと早く知らなかったんだろう!」と思いました。- のようなコードを書かなければならないのが嫌だった

stringstream ss;
ss << anIntVal;
mystring = ss.str();

今、私は書く

mystring = boost::lexical_cast<string>(anIntVal);

昨日、stackoverflow で、ブースト スプリット (コードを書く手間を省いてくれるもう 1 つの宝石) に出会いました。

string stringtobesplit = "AA/BB-CC")
vector<string> tokens;

boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); 
// tokens now holds 3 items: AA BB CC

私は定期的に使用できる他の機能を探してブーストのドキュメントを調べ始めますが、物事を見逃すのは非常に簡単だと感じています.

最もよく使用する/使用しないと困るブースト機能は何ですか?

4

25 に答える 25

63

おそらく私にとって最もよく使われるブーストの部分はboost::shared_ptrです。

于 2008-11-28T14:38:56.427 に答える
50

BOOST_FOREACHは人生を再び価値あるものにします。

(なぜ誰もこれについて言及していないのですか?この質問は8か月前に尋ねられました!)

于 2009-08-07T17:19:51.077 に答える
37

私のお気に入りは順不同です。

  • 正規表現
  • ファイルシステム
  • スレッド
  • lexical_cast
  • program_options (すばらしい!)
  • test (すべての単体テストのニーズに対応)。
  • 文字列アルゴリズム
  • 文字列トークナイザー
  • format (タイプセーフな printf スタイルの文字列フォーマット)
  • スマートptrs

初めてクロスプラットフォーム アプリを作成したとき、Boost は非常に役立ちました。Boost がなければ、本当に苦労していたでしょう。

于 2008-11-28T16:01:19.273 に答える
29

に独自のデストラクタを提供する方法が好きですshared_ptr
これは、たとえば、それを使用しFILE*てファイルを閉じることができることを意味します。
例えば

void safeclose(FILE*fp) {
    if(fp) {
        fclose(fp);
    }
}
void some_fn() {
    boost::shared_ptr<FILE> fp( fopen(myfilename, "a+t"), safeclose );
    //body of the function, and when ever it exits the file gets closed
    fprintf( fp.get(), "a message\n" );
}
于 2010-03-05T03:46:14.560 に答える
22

マルチインデックスコンテナについては誰も言及していないので、後でチャイムを鳴らします。それらが必要になることはそれほど頻繁ではありませんが、ブーストなしで同等のデータ構造を作成することは非常に苦痛であり、効率も低下します。私は最近、2つのキーを検索するコンテナーを作成するために、それらを頻繁に使用しています。

于 2009-02-10T17:45:16.457 に答える
20

誰も言及していないことに驚いていboost::optionalます。shared_ptrとを除く Boost のどの部分よりも頻繁に使用していることに気づきscoped_ptrました。

于 2008-11-30T02:01:01.480 に答える
19

誰もブースト::タプルについて言及していませんか? 恥ずかしい!

于 2008-11-28T16:05:37.470 に答える
11

BOOST_STATIC_ASSERT

更新(2011 年 10 月): C++11 (C++0x) にはstatic_assert http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertがあります

于 2008-11-28T23:14:39.850 に答える
9

私が最もよく使用するものの 1 つは Boost 自体ではありませんが、Boost の上に構築されたAdob​​e Source Libraries (ASL)です。具体的には、別個の begin/end イテレータの代わりに boost::range を受け入れる標準アルゴリズムの拡張機能です。次に、電話をかける代わりに、次のように言います。

std::for_each(some_container.begin(), some_container.end(), do_something());

私は簡単に言うことができます

adobe::for_each(some_container, do_something());

(ASL のこれらの部分が最終的に Boost に移行されることを願っています。)

于 2010-03-05T04:05:00.443 に答える
8

boost::shared_ptrは、最新のC++プログラミングIMHOの要件です。そのため、TR1で標準に追加しました。boost::program_options、、、boost::bindおよびboost::signalそれらが何のためにあり、それらを使用する方法を知っているなら、本当に素晴らしいです。ただし、最後の2つは新規参入者を怖がらせる傾向があります。

于 2008-11-29T21:39:09.573 に答える
8

私はよく使います:

  • ブースト::シグナル
  • ブースト::shared_ptr
  • ブースト::lexical_cast
  • ブースト::バインド
  • ブースト::ランダム
  • ブースト::スレッド
  • ブースト::コピー不可

その他、Tuple、Static Assert、Integer などは、さまざまなプラットフォームで使用される予定のライブラリを作成する場合に非常に役立ちます。

グラフやラムダなどはより具体的です。

于 2008-11-28T15:18:16.487 に答える
7

私たちは、boost::spirit が ECMAScript を解析するビジネス ソリューションに非常に役立つことを発見しました。複雑ですが、とてもいいです!

于 2010-03-09T18:17:29.837 に答える
7

Boost.Threadの回答の間にまだ表示されていないことに驚いています。

于 2010-04-20T15:49:15.353 に答える
7

私は何年もの間 shared_ptr を使用してきました。これは非常に便利で、プロジェクトにこれがなければならない理由はありません。

その上で、一般的なコールバック メカニズム (特にテスト時に役立つ) に Bind/Function/Lambda を使用し、汎用の sprintf 置換用に Format も使用します。

最後に、問題を解決するために Variant を怒りで使用したのはつい先日でした (無関係なトークン タイプの小さな固定セットで応答できるパーサー)。ソリューションは非常にエレガントで、とても満足しています。


何年も経ち、時代が変わったので、更新の時間です。SharedPtr と Function は標準の一部になり、Bind と Lambda は実際の言語レベルのラムダ機能によって廃止されました。

私はまだ Variant を使用しています (これも標準化されていますが、まだ使用していません)。Format の大部分は fmtlib (これも標準化されています) に置き換えられています。

私が使っているBoostの大きな部分はBoost.Asioです。これは標準化の過程にあります。

于 2008-12-04T15:17:43.163 に答える
6

次のように、タプルを使用してマップを反復します。

string key, value;
BOOST_FOREACH(tie(key, value), my_map) { ... }

ブースト割り当てを使用すると、次のようにマップを初期化できます。

map<string, string> my_map = map_list_of("key1", "value1")("key2", "value2")("key3", "value3");

そして、範囲アダプターと pipe("|") 演算子を使用して、マップの値を逆方向に反復処理できます (例として):

BOOST_FOREACH(string value, my_multimap.equal_range("X") | map_values | reversed) { ... }
于 2012-01-15T08:06:52.733 に答える
5

sのSTLコンテナよりもBoostPointerContainersを使用していshared_ptrます。

于 2010-06-24T08:34:52.473 に答える
5

boost::program_options を確認する必要があります。これにより、コマンド ラインの解析がはるかに簡単になります。

于 2010-03-05T04:45:36.060 に答える
4

boost::numeric::ublas::matrixをかなり使用しています。

于 2008-11-28T14:48:46.627 に答える
3

私が最もよく使用するものは、TR1 で利用できるようになりました。

  • 共有ポインタ
  • 配列クラス

今では、プール クラスやその他のより具体的なものも使用しています。

Boost はほとんどのプログラマーにとって役立つものであることを理解できました。それが、Boost が将来の標準ライブラリーのテストベッドである理由です。

于 2008-11-28T14:41:04.083 に答える
3

私はboost::randomとboost::asioとboost::filesystemが大好きですが、boost::bind、boost::circular_buffer、boost::threadは非常に実用的です。スマートポインタは問題ありませんが、メモリ管理として代わりにRAIIを好みます

于 2008-11-28T14:42:20.477 に答える
3

boost::iclテキストの後処理にはかなりの量を使用します。そうしないと、自分でテキスト分割を実装する必要があったため、かなりの時間を節約できました...

BOOST_FOREACH私のコードのどこにでもあります:)

boost::functionboost::bind絶対に必要です。今ではstd::functionありますがstd::bind。これらは、不要なコードの量を減らすのに本当に役立ち、私の設計 (または私の妄想) には一般的に適しています。

私は最近使い始めましたがboost::interprocess::message_queue、これも素晴らしいツールです。

私はもっ​​と多くを使用したいと思いますが、Qt には Boost が行う多くのことを行うためのネイティブな方法があります。boost::junkie純粋な C++ をプログラミングする必要がある場合、私は:)になると思います。

于 2012-09-05T19:53:02.493 に答える
3

ここに私の2セントがあります:

  • boost::scope_exit - 1 回の使用のためだけに RAII クラスを定義する必要はありません
  • ブースト::任意
  • ブースト::バリアント
  • ブースト ポインター コンテナー ライブラリ (ptr_vector)
  • ブースト プール ライブラリ
  • boost::unordered_map / boost::unordered_set
于 2011-07-13T09:04:43.453 に答える
1

boost::lexical_cast について言えば、'format' のようなものが std::string ライブラリの静的メンバーではないのはなぜですか?
ほとんどすべての gui ライブラリには、初期化された文字列を返す CString::Format("%i") または QString::Number("%i") のようなものがあります。

于 2008-11-28T15:23:34.463 に答える
1

質問を逆にする必要があると思います。ブーストのどの部分を使いたくないですか?

私の経験では、ほとんどすべてが興味深く、各問題領域で役に立ちます。

関心のある分野を見つけるには、時間をかけてブーストのドキュメントを隅々まで調べてください。

1 つの例外として、その役割を果たしているboost::numeric::ublasのはどちらかですが、Eigenの方がはるかに優れています。

于 2010-11-19T00:16:42.480 に答える