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

「PならばQ」の式

!P || Q これが読みづらい Qの遅延評価のために関数にできない P ? Q : true なるほど・・・vector_example.hpp

さよならassert

前回の続き 要するにassertは意味が多すぎるので名前をつけよう、ということだ バグ潰しのためなのか事前条件なのか分からないassertがよくある 結局こうなった・・・ソースコード postconditionがあるときのreturnがマクロになってしまった []#include[] []<pstade/contract.hpp></pstade/contract.hpp>…

Design by Contract (DbC)

こんなものが提案されていた(必見)・・・Proposal to add Contract Programming to C++ function-try-blockでなんとかする試み・・・ソースコード 標準準拠のはず、だが、これは今までで一番怪しい 結局コンストラクタでお手上げになってしまった postcondit…

Rangeをconcatする

adobeにすでにあった・・・segmented_iterator これだけ変えれば怒られないだろう・・・concatenate_iterator 関係ないですが、やはり使うらしい・・・overload型 さて、*itがrangeを返すようなitをTopIterator、返されたrangeをBottomRangeと呼ぶことに(勝…

bool_testable

bool_testableというのが、Boost.Operatorsにいったん追加されたあと程なく削除されている・・・昔のoperators.hpp 完全な実装は無理なのかもしれない いまのところこうなった・・・ソースコード 参考文献 The Safe Bool Idiom Another safe_bool alternativ…

VC7.1付属のSTLのauto_ptrのバグ

以下のコードのように、コピー(Move)するauto_ptrのelement_typeが異なるとoperator auto_ptr_ref()が無限に再帰してスタックがとぶ どうもauto_ptr_refのコピーコンストラクタを呼ぶために再びこれが呼ばれるようだ コンパイラのバグではなくSTLのバグと思…

Copyableでないといけない場合

ひっかかるのはまれであると思いますが、以下のコードはGCC3.4ではエラーになる・・・参照 draft October 2005では修正されているようだ []#include[] []<boost/noncopyable.hpp>[]</boost/noncopyable.hpp>

nonassignable

CopyConstructibleだがAssignable(operator=)はいらないというのは結構ある にこっそりあるが単独のヘッダでは使えないようなので・・・ソースコード []#include[] []<pstade/assignable.hpp>[] []#include[] []<pstade/nonassignable.hpp>[]</pstade/nonassignable.hpp></pstade/assignable.hpp>

属するコンテナを持たないイテレータのdereferenceについて

iterator_facadeはReferenceが参照型でない場合、IteratorCagegoryをInputIteratorに格下げする 参照でないとForwardIteratorの規定(24.1.3/1 の最後の行)を満たせないから ForwardIteratorのdereferenceは参照型でなくてはいけないから (24.1.3/1) RandomAc…