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

C++について書きたいことメモ

draft

C++ question cueue

hidden

C++ compiler deficiencies

sizeofハック

通常template metaprogramming(以下TMP)では型を受け取ってその情報を取得したり操作したりしますが,オブジェクトまたは式のみを受け取ってそのオブジェクトまたは式の型の情報を取得する方法も存在します. 例えば以下のような関数のオーバーロードを宣…

空間内の1点から一様に放射する線の生成,あるいは(単位)球面上に一様に分布する乱数点の生成

球体外の点を棄却した後,正規化する(球面上に射影する)方法 1 x = 2 * rand() - 1; y = 2 * rand() - 1; z = 2 * rand() - 1;これだけ.次にこのうち原点が中心で半径が1の単位球面を考えて, この単位球の外に生成される点を捨てる. do{ x = 2 * rand()…

C++ Paranoia - 汎用プログラミングにおけるTemplate MethodパターンとswapとADLフックと

C++

汎用プログラミングにおけるTemplate Methodパターン Aという処理とBという処理がある.これらの処理中には共通したサブルーチンXがある.この共通した処理をまとめて関数なりサブクラスが実装すべきメンバ関数とするのは非常に良くあるパターンだ.デザイン…

Move Semantics

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 Firewall" という名前は私が勝手につけたもので,一般に認知された呼び方ではないです) ADL による不用意な関数名の探索を回避しつつ,呼び出し側にそれを意識させない手法. ある関数あるいは関数テンプレートがあって,それを ADL の対象とし…

using によって引っ張ってこられたクラスと ADL

C++

using によって引っ張ってこられた関数と 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ヲツカオウ! ノヽノヽ くく

help作成

bjam --help-enable-detailed --help-output html --help-output-file reference --help-allUNIX系OSではquotingの関係からかまともに動作しない.

組み込み済みfeature

echo [ VARNAMES feature ] ;を見れば分かる.

Windowsレジストリキー取得

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…

BBv2メモ

組み込み済みルール echo [ RULENAMES ] ;で見ることができる.

pathモジュール

概要 - パス関連のルール定義 場所 - BOOST_BUILD_PATH/util/path.jam make rule make ( native ) 概要 環境固有のパス表現を正規化表現に変換する 引数・戻り値 native - 正規化する環境固有のパス表現 戻り値 - 正規化されたパス native rule native ( pat…

osモジュール

概要 - 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…

testingモジュール

概要 - 単体テスト用各種ルールを定義.importすればルールはグローバルに導入される 場所 BOOST_BUILD_PATH/tools/testing.jam compile rule compile ( sources + : requirements * : target-name ? ) 概要 コンパイルが成功すれば .test ファイルを生成.…

symlinkモジュール

概要 - symlinkルールを定義 場所 - BOOST_BUILD_PATH/tools/symlink.jam symlink rule symlink ( target * : sources * ) 概要 シンボリックリンクを生成 引数 target - シンボリックリンクのターゲット sources - シンボリックリンクのソース 要調査:引数…