100-01-01から1年間の記事一覧
draft
hidden
通常template metaprogramming(以下TMP)では型を受け取ってその情報を取得したり操作したりしますが,オブジェクトまたは式のみを受け取ってそのオブジェクトまたは式の型の情報を取得する方法も存在します. 例えば以下のような関数のオーバーロードを宣…
球体外の点を棄却した後,正規化する(球面上に射影する)方法 1 x = 2 * rand() - 1; y = 2 * rand() - 1; z = 2 * rand() - 1;これだけ.次にこのうち原点が中心で半径が1の単位球面を考えて, この単位球の外に生成される点を捨てる. do{ x = 2 * rand()…
汎用プログラミングにおけるTemplate Methodパターン Aという処理とBという処理がある.これらの処理中には共通したサブルーチンXがある.この共通した処理をまとめて関数なりサブクラスが実装すべきメンバ関数とするのは非常に良くあるパターンだ.デザイン…
C++プログラマーで値あるいはオブジェクトの「コピー(Copy)」 その操作は構文としては代入演算子"="で表現されます. 一方,比較的新しい概念として「移動(Move)」と呼ばれる操作が存在します.左矢印の" int i = 3; int j = 1; j <- i; // jは3になる.iが…
トークンは必ずホワイトスペースでばらさないいけない.最初はほぼ間違いなくこれに関するミスをやらかします. compile hello.cpp;上の場合 "hello.cpp;" を1つのトークンとして処理しようとします. 2重引用符で囲まれた文字列はホワイトスペースで区切ら…
汎用射影関数と一時オブジェクトの寿命 複数のオブジェクトを単に1つにまとめ上げることだけを目的としたクラス,例えば std::pair や boost::tuple をタプル様クラスと呼ぶことにする.このとき,これらタプル様クラスに対してそのオブジェクトが保持する複…
(注:"ADL Firewall" という名前は私が勝手につけたもので,一般に認知された呼び方ではないです) ADL による不用意な関数名の探索を回避しつつ,呼び出し側にそれを意識させない手法. ある関数あるいは関数テンプレートがあって,それを ADL の対象とし…
ADL の対象となる関数は対象となる名前空間に定義された関数だけで, using によって別の名前空間から名前だけ引っ張ってこられた関数は対象とならない. namespace NS1{ struct X {}; void f( X x ) {} } namespace NS2{ void g( X x ) {} } namespace NS1{…
データ指向とアルゴリズム指向 (ここで書いている「データ指向」と「アルゴリズム指向」という言葉・観点は私が独自に導入した言葉です.) STL が強力なライブラリである理由として,アルゴリズムがデータ構造へアクセスする際にそのアクセスがイテレータ…
move をエミュレーションする上での限界非const左辺値からの自動的な move return ができない. > return 文に明示的に ai_a::move を指定しなければならない. 派生クラスの非const右辺値を自動的に基底クラスの右辺値参照オーバーロードにディスパッチする…
ある Generator を受けて構築されて, operator* の結果が Generator の operator() の結果を返すようなイテレータ( もしくは Range)って実装が意外と難しいよね,ってゆ〜. typedef boost::mt19937 rng_type; rng_type rng; typedef boost::uniform_real…
| \ __ / _ (m) _ピコーン |ミ| / .`´ \ ('A`) ソウダ! Boost.Buildヲツカオウ! ノヽノヽ くく
bjam --help-enable-detailed --help-output html --help-output-file reference --help-allUNIX系OSではquotingの関係からかまともに動作しない.
echo [ VARNAMES feature ] ;を見れば分かる.
W32_GETREG rule W32_GETREG ( path : data ? ) 概要 指定されたレジストリのデータを取得する 引数・戻り値 path - データまでのキーパス data - 取得したいデータの名前.省略された場合pathのデフォルトの値が使われる
UPDATE (Boost.Jam) rule UPDATE ( targets * ) 概要 targetsを更新できるようクリアし,targetsを更新する 要調査
BACKTRACE rule BACKTRACE ( ) 概要 スタックトレースで構成されたリストを返す
ECHO (Jam/MR) ECHO ( args * ) ; 概要 argsを標準出力に表示.parsing phaseで表示される EXIT (Jam/MR EXIT ( args * ) ; 概要 argsを標準出力に表示した後,failure statusで終了する.parsing phaseで呼び出される GLOB (Jam/MR) rule GLOB ( directorie…
ALWAYS(Jam/MR) rule ALWAYS ( targets + ) 概要 targetsは最新であるかどうかに関わらず常にリビルドされることを明示.cleanやuninstallターゲットに使用される.NOTFILEと組み合わせるのが普通だが必須ではない LEAVES(Jam/MR) rule LEAVES ( targets…
DEPENDS(Jam/MR) rule DEPENDS ( targets1 + : targets2 + ) 概要 targets1の各々がtargets2の各々に依存していることを明示. 引数 targets1 - 依存するターゲット targets2 - 依存されるターゲット INCLUDES(Jam/MR) rule INCLUDES ( targets1 + : tar…
組み込み済みルール echo [ RULENAMES ] ;で見ることができる.
概要 - パス関連のルール定義 場所 - BOOST_BUILD_PATH/util/path.jam make rule make ( native ) 概要 環境固有のパス表現を正規化表現に変換する 引数・戻り値 native - 正規化する環境固有のパス表現 戻り値 - 正規化されたパス native rule native ( pat…
概要 - OSに関する情報を取得するための各種ルールを定義 場所 - BOOST_BUILD_PATH/util/os.jam name rule name ( ) 概要 OSの名前を返す.OSの文字列はjam_src/jam.hを見る限り以下のとおり VMS NT AS400 OS2 MAC AIX AMIGA BEOS BSDI COHERENT CYGWIN FREE…
概要 - 単体テスト用各種ルールを定義.importすればルールはグローバルに導入される 場所 BOOST_BUILD_PATH/tools/testing.jam compile rule compile ( sources + : requirements * : target-name ? ) 概要 コンパイルが成功すれば .test ファイルを生成.…
概要 - symlinkルールを定義 場所 - BOOST_BUILD_PATH/tools/symlink.jam symlink rule symlink ( target * : sources * ) 概要 シンボリックリンクを生成 引数 target - シンボリックリンクのターゲット sources - シンボリックリンクのソース 要調査:引数…