ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

boost に関して


最近 boost を使うようになってデバッグの効率がよくなった感じ。
ちょっと便利な使い方 ( というか私が知ってる使い方 ) を紹介。

boost::shared_array, shared_ptr
 自動 delete 付きメモリ管理クラスだけど、代入可能でナイス!
 STL に溜めれるから寿命管理が楽。頼りすぎるとメモリ圧迫しすぎるので注意。

 std::set<boost::shared_ptr<CHoge> > stack;
 stack.push_back( boost::shared_ptr<CHoge>( new CHoge ) ); // で追加
 stack.pop_front(); // 一個解放
 stack.clear(); // 全部解放

boost::function, bind
 関数ポインタを引数もくっつけて1つのインスタンスにできて素敵。

 struct TFunc {
   static void Callback( int a, int b ) {
     // いろいろ
   }
 };
 boost::function0<void> func = boost::bind( TFunc::Callback, 1, 2 );
 Hogehoge( func );

 こんな感じで関数内関数(?)みたいな感じで、名前空間を汚さずにコールバック関数が作れます。

 boost::function0<void> func = boost::bind( &CHoge::HogeFunc, this, 1 );

 こうするとメンバ関数も扱えます。これで普通の関数と同じに扱えるのがポイント。

boost::thread
 マルチスレッドの多プラットホーム化程度の利用かな…

 struct TFunc {
   static void ChildThread( int thread_data ) {
     // 子スレッド
    }
 };
 boost::function0<void> func = boost::bind( TFunc::ChildThread, data );
 boost::thread thr( func );

 こんな感じに function, bind とあわせて使います。( 私は。 )


これ以外は C 標準ライブラリで用が済ませちゃうことが…
「もっと便利な使い方があるよ!」ってタレコミお願いします。