2006-04-01から1ヶ月間の記事一覧

The Scala Programming Language

これはすごい・・・The Scala Programming Language Javaをサブセットにしてしまう関数型言語であるらしい package pstade.study; import java.io._;

ヘッダでは、メンバでないconst intは使えない

要するに、翻訳単位に局所的なオブジェクトは何であれ、templateから参照しては駄目らしい・・・参照 やっぱりBoost.Lambdaは違反しているらしい 対策は、 無名名前空間の参照でオブジェクトを捕まえる コンパイル時定数がほしいなら、staticメンバ変数を使…

マクロをオーバーロードする

マクロの名前を変えたらいいだけなんですが、せっかくなので昨日のを使おう まさにBOOST_MPL_PP_IS_SEQというのが、Boost.MPLにこっそりありました 例として、ヘッダでオブジェクトを定義するマクロ・・・ソースコード 引数が、Sequenceか、valueというトー…

BOOST_PP_IS_UNARY

これで引数がSequenceかどうかを調べられる・・・参照 ただし、調べられる引数は限られる(Tupleを渡したりはできない) Boost.TypeOfで使われている []#include[] []<boost/preprocessor/detail/is_nullary.hpp>[] []#include[] []<boost/preprocessor/detail/is_unary.hpp>[] []#include[] []<boost/preprocessor/detail/is_binary.hpp>[]</boost/preprocessor/detail/is_binary.hpp></boost/preprocessor/detail/is_unary.hpp></boost/preprocessor/detail/is_nullary.hpp>

新コンパイルタイム・ポリモーフィズム(Metafunctionが要る場合)

メンバあるいはtag dipatchを使ったカスタマイズ boost::result_ofのカスタマイズにtag dispatchを付けた形に近くなった 結局は、型と型とマッピングなので ADLは使わない Metafunctionをspecializeするために、どうしても名前空間を開くことになるから enum…

新コンパイルタイム・ポリモーフィズム(Metafunctionが要らない場合)

結局、Metafunctionが要る場合と要らない場合に分かれるのではないかと思う まずMetafunctionが要らない場合 メンバとADLを使ったカスタマイズを利用 tag dispatchと同じことはenable_ifで代用(overload型の存在価値が決定的に) 継承階層を利用したい場合は…

has_xxx

どうもいわゆるhas_xxxはprivateメンバには使えないらしい・・・参照

enumerate_range

id:y-hamigaki:20060409のスレッドを使ったiteratorのおかげでid:mb2sync:20060408に意味が出てきた? Enumerableという概念を勝手に作って、このiteratorでSinglePassRangeを作る やれることはenumerateを使っても変わらないが、BOOST_FOREACHが使えるのは…

コンストラクタ

base_from_memberのコンストラクタは引数をコピーする・・・参照 コピーしたらいけないときはboost::refを使って渡すこと

続コンパイルタイム・ポリモーフィズム

id:y-hamigaki:20060407に関連して 特に、Metafunctionのカスタマイズが必要ない場合、継承階層が働くように、デフォルトの動作(メンバ関数を呼び出す等)はない方が良いと思う 例えば、の一番上のboost_range_beginは、ある基底クラスがRangeとしてカスタマ…

trivial_singleton

にこっそりある 無名名前空間の参照を使っている アクセスのオーバーヘッドは翻訳単位ごとに一回きりである このオブジェクトに関する限り、初期化順序の問題は起こらない オブジェクトの初期化はスレッドセーフ 関数呼び出しのシンタックスでもスレッドセー…