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

iterator_rangeのoperator==

なんとstd::equalを呼び出す・・・参照 メンバのequalを呼ぶこと

モダンな?::GetWindowText

ずっとこの有名な関数をC++にするとどうなるのか考えていた 今のところの結論、WindowTextはRangeである・・・ダウンロード 実装はただのBoost.ScopedArrayです Boost.BaseFromMemberは意外と使う機会が多い []#include[] []<pstade/tomato/window/window_text.hpp>[] []#include[] []<pstade/oven/sequence_cast.hpp>[]</pstade/oven/sequence_cast.hpp></pstade/tomato/window/window_text.hpp>

Conversion Member Templateを使った戻り値型の指定の省略

一時的なクラスを用意して、戻り値の型の指定を省略できるようにする 使いどころが多くて面白いです・・・参照 xxx_castのような関数にも全部用意してはどうだろう・・・boost::lexical_castの場合 []#include[] []<pstade/lexical_cast.hpp>[]</pstade/lexical_cast.hpp>

ヌルポインタ

前に見つけたBoost.Nullですが、(たぶんコンパイラのバグで)全然動かない IntegralConstantにしようとも思いましたが、結局こうなった []#if[][] !defined(NULLPTR)[] []#define[][] NULLPTR 0[] []#endif[]

iostreamにType Erasureをしてみる

ATLTRACEを置き換えたくてこんなものを作ってみた out []#include[] []<pstade/debug.hpp>[] []#include[] []<pstade/napkin.hpp>[] []#include[] []<windows.h>[] []#include[] []<pstade/napkin/dout.hpp>[][]using[] []namespace[] []pstade[][];[][]PSTADE_DEBUG[][]( [][]napkin[][]::[][]ostream[] []my_os[][]([][]napkin[][]::</pstade/napkin/dout.hpp></windows.h></pstade/napkin.hpp></pstade/debug.hpp>…

戻り値の型をテンプレート仮引数にする

Boost.Phoenix-2にEvalPolicyという概念があるんですが、戻り値の型がテンプレート仮引数になっている 戻り値の型をユーザーが書かなくてよくなる (ソースが劇的にすっきりする) ライブラリ側はこちらに注意 ちなみに以下のようなコードを本当に使っていた […

const限定するだけの関数

Boost.Lambdaにmake_constがあった もっと汎用的にhelp_rvalue_deductionというのがBoost.Phoenix-2にある こちらと関係あるのかもしれない Boost.Phoenix-2のドキュメントは分かりやすいです []#include[] []<boost/test/minimal.hpp>[] []#include[] []<boost/lambda/core.hpp>[] []// make_const[]</boost/lambda/core.hpp></boost/test/minimal.hpp>

Phoenix-2

これが新しいBoost.Lambdaらしい []#include[] []<boost/test/minimal.hpp>[] []#include[] []<boost/spirit/phoenix/function.hpp>[]</boost/spirit/phoenix/function.hpp></boost/test/minimal.hpp>