2011-01-01から1年間の記事一覧

正規表現の正規表現をboost.xpressiveで記述する

C++

正規表現の文字列を正規表現ライブラリへ渡す前にフィルタリングしたくなったので正規表現自体の正規表現を書いてみました。 つまり事前に必要の無い表現を弾いたり、新たな表現を追加したりなんて事がしたいわけです。 記述に当たって普通の正規表現で書こ…

boost::graph グラフコンテナと共に頂点記述子もコピーする

C++

adjacency_listのグラフをコピーする際に注意することがあります。 VertexListにlistSなど指定しているとvertex_descriptorはコピー先で使用できないということです。vecSの場合vertex_descriptorは整数インデックスなので問題ないと思いますが他はポインタ…

変数と同じ値の定数をテンプレート引数に渡す。

C++

つまり以下のようになる。 template <int N> void Function(); void Call(int n /* 0-2 */) { if (n == 0) { Function<0>(); } else if (n == 1) { Function<1>(); } else if (n == 2) { Function<2>(); } } Callに渡された変数nに対応するFunctionを呼び出す。 予</int>…

関数の戻り値で悩むことってよくありますよね

C++

関数の戻り値などで複数の状態を表したい場合、enumを使うのが正しい方法だと思います。 しかしながらついついint型を使用して-1だとか2だとかを直接書いてしまったりします。でもこれはなるべく避けたいところです。 そこでマルチキャラクタリテラルが使え…

(char*) とか書いていませんか? sign_cast作ってみた

C++

よく文字列やバッファを扱う関数でchar*とunsigned char*が変換できずに(char*)とか書いてませんか? これはかなり危険な書き方なのでやめた方がいいです。C形式のキャストをやめてC++形式のキャストを使っても危ないです。 static_castだと変換できません。…

C++0x(gcc 4.5.1 only)用のstatic ifライブラリを作ってみました。

C++

C++にもstatic ifが欲しいと思い作ってみましたが、かなり苦戦しました。 やっぱり言語ネイティブでサポートして欲しいですね。C++0xの規格の範囲ではどうやっても無理そうで、gccの挙動に依存してます。 STATIC_IF library for C++ · GitHub 利点 static if…