2007-10-02 OutputIterator Adaptors C++ Boost.Range Oven OutputIteratorは実装が簡単なので誰かが作っているはずだがあまり見つからない MultiOut trotter (を拡張したようなライブラリ) 以下のような感じにする予定 copy(file_range<>("data.txt")|utf8_decoded, copier(utf8_encoder|=stream_writer(fout)) |=copier(transformer(f)|=std::back_inserter(vec1)) |=std::back_inserter(vec2) );
2007-09-29 型がPODかどうかチェックする方法 C++ Grammar boost::is_podはほとんどのコンパイラで動かないようだ 以下のようにすると少なくとも警告が出せる (Comeauやgccなど) Boost.Xpressiveが利用していると思われる inline void pod_check(...) {} struct A {}; struct B : A {}; inline void pod_check_of_AB() { ::pod_check(A()); ::pod_check(B()); // warning: non-POD class type passed through ellipsis }
2007-09-28 adobe::poly C++ これはadobeのtype erasureライブラリであるらしい…ドキュメント(されてないけど)と記事(pdf) いわゆるclone_ptrと違ってCopyConstructibleを要求するが、copyにheapを使わないような最適化が出来る 実装を試みた…実装 そのほか気になる記事(pdf) A Language for Generic Programming Notes on Programming
2007-09-27 右結合のpipe C++ Grammar Boost.ResultOf 関数呼び出しのシンタックスは醜い f(g(h(x)) を f $ g $ h $ x の様な感じに書けるようにしたい これはpipableを逆にしただけなので、何か右結合のoperator overloadをこの実装に追加すればいい Pipableの概念に組み込むのがいいかもしれない これを使ってOutputIteratorをpipe風にする ぴったりくるoperatorが分からなかった 続きを読む
2007-09-26 rangeをmapにする C++ Boost.Range "range expression"を型をキーにした連想配列にする (実装) iteratorにデータを持たせて、あとで取り出す 使い道はまだ不明 続きを読む
2007-09-25 Unrolled Algorithms C++ Boost.Range 保存していたBoost.Sequenceから拝借 (実装) 早くなったり遅くなったり、使いどころが難しい oven::unrolled_copy_c<7>(b, &a[0]);
2007-09-22 any_output_iterator C++ Boost.Range OutputIteratorを何でも保持するany_output_iterator (実装) この実装が正しいのかどうか分からない any_iteratorと違うクラスにするのは正しいと思う std::vector<char> v; any_output_iterator<char &> oi(std::back_inserter(v)); std::string src("abcdefg"); std::copy(src.begin(), src.end(), oi); BOOST_CHECK( equals(v, src) );