2005-10-01から1ヶ月間の記事一覧

Boost.ScopeGuard

Boost.MultiIndexにこっそりある。Vaultにもある おおもとの解説。 こんなものも。 Type ErasureとRAIIの二つをからめたテクニック Boost.ForeachはType Erasureにのみ使っているようだ 汎用的なRAII担当の型はauto_ptr等とは違って複雑になってしまうのでTy…

Boost.Proto

Boost.Xpressiveに含まれ、Expression Templateの実装を支援する 似たようなライブラリと思われるもの・・・PETE, Daixtrose []#include[] []<boost/assert.hpp>[] []#include[] []<boost/xpressive/detail/proto/proto.hpp>[] []#include[] []<boost/xpressive/detail/proto/compiler/fold.hpp>[]</boost/xpressive/detail/proto/compiler/fold.hpp></boost/xpressive/detail/proto/proto.hpp></boost/assert.hpp>

Range adapters

Rangeを受け取りRangeを返す関数を連続で呼び出すとき h(g(f(rng))) を rng | f | g | h のように"手続き的に"書ける Boost.RangeExのboost::adaptor名前空間にあります 名前が提案と違って過去分詞ではないので注意 見た目に反して、あるRangeへの実装はす…

14.5.4 -9- Class template partial specializationsの制限

手前の型に依存する型でないテンプレート仮引数による部分特殊化はできない boost::mpl::vector_cはlongで決めうちなのでそれ以上のサイズの型では切り捨てが起こる []#include[] []<boost/mpl/vector_c.hpp>[][]template[][]< [][]class[] []T[][], [][]T[] []t[][] >[] []struct[] </boost/mpl/vector_c.hpp>…

変数の初期化コードをローカルスコープに入れる

関数にするほどでもない時に。 []// C[] []int[] []x[][], [][]a[][], [][]b[][];[] []a[][] = [][]f[][]();[] []b[][] = [][]g[][]([][]a[][]);[] []x[][] = [][]h[][]([][]b[][]);[][]// C++ ?[] []int[] []a[][] = [][]f[][]();[] []int[] []b[][] = [][]…

boost::iterator_rangeとboost::sub_rangeの違い

戻り値にsub_rangeを使うと、一時オブジェクトによって意図しないconst性が付加されてしまう iterator_rangeのconst性は、それが保持するiteratorのconst性に関与しない Boost.StringAlgorithmのように、戻り値には必ずiterator_rangeを使うこと sub_rangeは…

assertでメッセージを表示する

某書とかぶりましたが偶然です []assert[][]([][]marker[][] != [][]s[][].[][]get_cur[][]() && [][]"biscuit::star - Parser must advance on star-operation"[][]);[]

Boost.Foreachの実装の説明

Conditional Love: FOREACH Reduxにあります Foreachに興味ない人でも必見

Argument-Dependent Lookup Barrier

C++

boost::const_beginがbeginを限定せずに(boost::なしに)呼び出している これがADLを引き起こし、一つのRangeがあるというだけでその名前空間でbeginという名前が使えなくなってしまう boost::beginを呼び出すべきだと思う クラス名までADLに取り込んでしまう…