Boost

デフォルトコンストラクタを持たないクラスのシリアル化

Boost.Serialization で,デフォルトコンストラクタを持たないクラスをシリアル化する際の注意. 普通のシリアル化ではクラスにデフォルトコンストラクタが存在しなくても問題はない.しかし,ポインタ(boost::shared_ptr や boost::scoped_ptr などのスマ…

Boost.Foreach + Boost.Range + Boost.StringAlgorithms

Range というものが,ただのコンテナの拡張ではなく,いかに「うはーゆめがひろがりんぐ」なものであるか. がリリースに入っていないので, CVS HEAD からコピペ.要 Boost 1.33.0.

演算子によるデバイス/フィルタの合成/コピー

ちぅか,昨日のをスコープ限定型演算子構文糖(http://d.hatena.ne.jp/Cryolite/20050205#p1 の『[Boost][Range]iterationできるrange』を参照)使って書いたら楽しいことになる予感!! namespace cry{ namespace iostreams{ namespace composite_operators…

うはーゆめがひろがりんぐ

Boost.Iostreams で遊んでみた結果,最終的に以下のようなコードに行き着く. ( cry::iostreams::newline_filter は boost::iostreams::newline_filter が Peekable を要求していてあんまり使い物にならないのを改良したもの. cry::iostreams::u_converter…

整数型が表現可能な範囲の大小 - boost::numeric::is_subranged

ある整数型がある整数型で表現可能(前者が表現可能な値の範囲が,後者が表現可能な値の範囲の部分集合になっている)かどうかを判定する特性クラスとして boost::numeric::is_subranged template<class T, class S> boost::numeric::is_subrangedという特性クラスがある.で,</class>…

内部で一時バッファを使うアルゴリズムのインタフェース

template< class SinglePassReadableIterator , class IncrementableWritableIterator , class SequenceMetaFunctionClass > void algorithm_using_temporary_buffer( SinglePassReadableIterator first, SinglePassReadableIterator last , IncrementableWr…

参照型を取る boost::variate_generator

そ〜いえば書くの忘れてて Boost.Random の話が出たので思い出したけれど, http://d.hatena.ne.jp/Cryolite/20050423#p2 この問題は // variate_generator のテンプレート第1引数が参照型なのに注目! variate_generator<mt19937 &, uniform_int<> > rnd(rng, uniform_int<>(-1000,10</mt19937>…

乱数関係のコンセプト

乱数生成系の Boost クラスは何かインターフェースが統一されていないというか,ドキュメントに書いてあるコンセプトの有効式がいくつか通らないクラスが多数ある.特にシード設定のあたりが乱数生成クラス毎にばらばらで統一されてない感があった.でも, h…

入力・出力として何を受けるか

一般に「入力」や「出力」を受けるインターフェースは何を受けるべきか?という問題. たとえば,今考えている入力はファイルだからファイルストリームを受ければ良いかなぁ,でもファイルのパスを受けるっつーのもあるかにゃー?ファイルポインタはどうだろ…

Boost 1.33.1 Beta

http://www.boost.org/ 1.33.1 Beta のリリースに今頃気が付いた……ってかベータってどういう扱いだ? ところで,VC++ 8.0 に関して Microsoft Visual C++ 6.0 (sp5, with and without STLport), 7.0, 7.1, 8.0. Note: Boost does not support the non-standa…

notfile

http://thread.gmane.org/gmane.comp.lib.boost.build/9291 うひょー.これめちゃくちゃ欲しかったんだよ〜.これでインストールターゲットをソースとすることによって,「ある実行ファイルを(依存する共有ライブラリとともに)特定の場所にインストールし…

コード変換と blocking

どーでも良いけれど,いや良くないけれど,ストリーム上でのコード変換って一般に non-blocking なんだよなー.Boost.Iostreams って今のところ blocking I/O しか対応してないから,non-blocking I/O を blocking I/O に修正しないといかんのが微妙に面倒と…

A challenging task - Seekable conversion stream filter

今,シークが可能な入力ストリームがあったとして,そのストリームに何らかの変換,例えば文字コード変換を行ってその変換結果を読むようなフィルタを実装するとする. 便宜上,(フィルタから見た立場で)変換前の入力ストリームを「入力ストリーム」,変換…

まるで面白くないアラインメントに関する考察

以下,自動変数の char 配列として確保した領域に,配置構文 new でオブジェクトを構築する方法に対する安全性の考察をやっています.ただし,C++ におけるアラインメントの考察を,実際のハードウェアなどの概念から完全に隔離された,厳密な規格の記述だけ…

未初期化な領域とアラインメント

http://d.hatena.ne.jp/Cryolite/20051021#p1 の問題に対する解答. まず大前提として,未初期化な領域に配置構文 new を用いてオブジェクトを構築する手法は潜在的な危険が多く,本当にそれが必要な場合以外は用いないという方針が基本であることを確認して…

Boost のファイルのうち必要なものだけを抜き出す

以下,BOOST_ROOT を Boost のディレクトリのルートとする. 今,BOOST_ROOT にいるとする.コマンドライン上で tools/bcp へ移動して bjam でビルド. >cd tools >cd bcp >bjam (オプションは Boost のライブラリのビルドと一緒)この時点で BOOST_ROOT の…

未初期化な領域とアラインメント

(注意:あくまで C++ の言語規格 ISO 14882-2003 のみを想定します) 未初期化なメモリ領域を char 配列の自動変数として(スタック上に)確保し,その領域上に別の型のオブジェクトを構築するコードを考えてみる. class MyClass { ..... }; int main() { …

Boost.Test によるメモリリークの検出@MSVC

Boost.Test が,いつの間にか MSVC 上でメモリリークをレポートしてくれるように改良されていた.これでもうメモリリーク検出のための設定をいちいち自分で呼び出す必要がなくなった.ちょーウマー. #define BOOST_AUTO_TEST_CASE #include <boost/test/auto_unit_test.hpp> BOOST_AUTO_TES</boost/test/auto_unit_test.hpp>…

Expression Template によるグローバルな評価

ふと思ったけれど,Expression Template で代入文の右辺だけじゃなくて,代入文も含めて ET にしてしまって,full expression の評価が完了した時点の一時オブジェクトのデストラクタ発動のタイミングで,ET にエンコードされた実際の式の評価を発動するっつ…

Aspective な機能追加

Mix-in というか,クラスに対して aspective な機能の injection をやろうとするときには,クラスに随伴する名前空間(associated namespaces)に ADL hook を追加するっつーのが最近の C++ での流行なんだろうか? ちぅか,Boost のその系統のライブラリは…

FOREACHマクロ

目的 r を Range (配列やコンテナの一般化)とするとき, // r の要素を各々表示する // it はイテレータの名前 CRY_FOREACH(it, r){ cout << *it << endl; }という構文を C++ 標準の範囲内の実装で可能にしたい.Boost.Foreach があるが,いくつかの点で気…

型変換可能性を含めた左辺値・右辺値識別

ある型 T に対して T の左辺値 T の const 左辺値 T の右辺値 T に変換可能な(ただし T 自身ではない)型の値 T に変換可能でない型 以上を識別したい,というモチベーションに関する実験メモ. MSVC 7.1 と GCC 3.4.4 で確認済み.要 Boost 1.33.0. #incl…

dll-path

http://d.hatena.ne.jp/Cryolite/20050906#p2 に関して. には絶対パスを指定しないと機能しないことが判明. import path ; pwd = [ path.pwd ] ; # target が依存する全ての実行ファイルと共有ライブラリを # bin 以下にインストールする.hardcode-dll-pa…

Windows と Unix でポータブルな,install 及び共有ライブラリパス検索のモデル

少なくとも開発・テスト中は「他(システムディレクトリや LD_LIBRARY_PATH 等の環境変数)を汚さない」を最優先の指針として以下が一番妥当か. # target が依存する全ての実行ファイルと共有ライブラリを # bin 以下にインストールする.hardcode-dll-paths …

SHARED_LIB

なんか発見した type 名. STATIC_LIB SHARED_LIB IMPORT_LIB …って,なんだ SHARED_LIB っつー type あるじゃん.っていうか無いとおかしいけど. LIB は SHARED_LIB + IMPORT_LIB な感じか.<install-type>LIB と指定するとインポートライブラリまでくっついてきて「実行</install-type>…

他のプロジェクトのターゲットを引っ張ってきてごにょごにょ

結局,よそから引っ張ってきたターゲットについて細かいことをしたいときには alias を1段挟むのが一番妥当な気がしてきた. use-project /boost : path-to-boost ; # toolset が msvc の場合の boost_filesystem に対する alias alias boost_filesystem : /…

BOOST_ALL_NO_LIB & BOOST_***_DYN_LINK

BOOST_ALL_NO_LIB (BOOST_***_NO_LIB) で auto_link を切っていても,動的ライブラリのリンクの際には依然 BOOST_***_DYN_LINK (BOOST_ALL_DYN_LINK) の指定が必要. BOOST_ALL_NO_LIB が単に #pragma comment(lib, ***) のon/off制御である一方で,BOOST_**…

fix + memonizememoize

今更 http://www.kmonos.net/wlog/52.php#_0308050827 http://d.hatena.ne.jp/Nabetani/20050901#p2 らへんを読んで,以前ここら辺の話題で遊んだことがあったので http://d.hatena.ne.jp/Cryolite/20041124#p1 そのときのやつをちこっとだけ変形.

そうだ,Boost.Build v2を広めよう

てか,Boost.Build普及のために自分が知ってるBoost.Buildの知識ぶべべべべっと吐き出した方が良いような気がしてきた.

Boost.Build v2でBoost引っ張ってくる設定簡単にしたいにゃー

てか,Boost.Buile v2でBoost引っ張ってくる設定毎回書くの面倒くさいにゃー.site-config.jamかuser-config.jamにまとめられないかにゃー. import modules ; import path ; local boost-build-path = [ modules.peek : BOOST_BUILD_PATH ] ; local boost-r…