2005-01-01から1年間の記事一覧
世界で二人しか使っていないcpp_to_hatenaを更新しました ついでに一年間のいろんなコードをまとめておきました libs/biscuit/exampleフォルダにあります・・・ダウンロード 使えるファイルをUTF8のみにしました (英語だけならそのままでOK) MinGWでも日本語…
当然答えは分からず 参照 参照
名前空間を限定しないで関数を呼び出すと、ADLが引き起こされて名前が衝突する可能性がある これは呼び出した側のバグであるが、標準ライブラリにもある GCCでは関数名とクラス名も衝突する・・・参照 完全な安全のためには、型は自分専用の名前空間にいなけ…
Boost.Foreachが見せてくれた・・・参照 ADLのための関数はどうせフルネームなのだからグローバル名前空間を使えばいいということだ Boost.Foreachではenumを使っているが移植性の問題かもしれない 以下、eVC4, VC7, VC8, GCC3.4.4で動作確認 []#include[] []<string></string>…
分からなかった boost::ignore_unused_variable_warningというのがあるが、使っていいのか不明 x;も警告の対象になっている・・・参照 Comeauだと(void)x;でも警告がでる void型へのキャストについて・・・参照 コンパイラによってまちまちのようだ というわ…
Visual C++ 2005 Express Editionで.NET 2003のSDKやATL7を使えるようだ・・・ATL3の場合 しかし_ATL_MIN_CRTを使えるようにする方法は分からず エラーが出たら template<>をコメントアウトする・・・参照 基底クラスのテンプレート引数として自分自身を渡す…
以下のコードがあいまいエラーになるのは正しいらしい(どうしてだろう) 明示的テンプレート引数の必要な転送関数ではBoost.EnableIfが必要になる 型だけを関数に渡すときは、boost::typeなどを使った方がいいかもしれない []template[][]< [][]class[] []Ex[…
前日分を少し実践的に書き直しました VC6からComeauまで動きます おそらくこれがC++のポリモーフィズムの答えであると思われる Boost.Rangeはあのままではまずいと思う Boost.Serializationではoverloadedの部分がconst unsigned int versionになっていて、v…
Boost.Serializationで発見。正式名称は不明・・・参照 引数adl_triggerによってADLを意図的に引き起こす ADLは、テンプレートのインスタンス生成地点(2nd phase)から名前を探すことができる カスタマイズする側は、提供される名前空間xxx_overloadにオーバ…
前回のはイテレータを直接使っているので見づらいです それらをboost::iterator_rangeを使ってRangeにしました・・・ダウンロード []#include[] []<fstream>[] []#include[] []<iterator>[] []#include[] []<string>[] []#include[] []<boost/cstdint.hpp>[]</boost/cstdint.hpp></string></iterator></fstream>
Boost.Regexにこっそりあるのを発見 utf8_codecvt_facetというのもあるらしい 以下、UTF-8のxmlファイルからコメントを抽出するコード ところで、をインクルードすると、std::equalがstd::mismatchを'std::'を付けずに呼び出している(実装がある)ので、それ…
全く関係ないですがついでに・・・ダウンロード Windows Media Player 9のデフォルトのスキンCoronaの不具合を直したものです
BOOLとboolを変換します・・・ダウンロード BOOLとboolの暗黙の変換は安全ですが警告がでます それを消そうとして return ::SomeAPI() == TRUE; とするのは危険です 成功の値としてTRUE(1)ではなく「0ではない」値を返すAPIがあるから static_castは意味が多…
C++言語のはてなリングができています・・・http://cpp.ring.hatena.ne.jp/
ひとまず完成・・・ダウンロード YARDのBoostへの移植です Expression Templateを手作りすることによって小さく速いコードを生成します Boost.SpiritやBoost.Xpressiveはオブジェクトから作ります VC6でもなんとか動きます []using[] []namespace[] []biscui…
tupleの場合はできます "推論"に、使用する関数の仮引数の型を使える場合もあります (auto_element) []#include[] []<set>[]</set>
Herb Sutterの講演に出てきた物がもうあった マルチスレッドプログラミングをモダンなシンタックスで支援する 実装にBoost.Fusionを使っている []#include[] []<iostream>[] []// for std::cin[] []#include[] []<boost/assert.hpp>[] []#include[] []<boost/bind.hpp>[] []#include[] []<boost/concept_check.hpp>[] []// for igno</boost/concept_check.hpp></boost/bind.hpp></boost/assert.hpp></iostream>…
Boost.RangeExに含まれ、Boost.IteratorのIterator adaptorの元になったiteratorを取り出します auto_baseはcast先の型としてauto_baseを渡す関数の仮引数の型を使います 実装は、「cast先の型と一致するまで、再帰的にbase()メンバ関数を呼び出す」というこ…
Boost.MultiIndexにこっそりある。Vaultにもある おおもとの解説。 こんなものも。 Type ErasureとRAIIの二つをからめたテクニック Boost.ForeachはType Erasureにのみ使っているようだ 汎用的なRAII担当の型はauto_ptr等とは違って複雑になってしまうのでTy…
Boost.Xpressiveに含まれ、Expression Templateの実装を支援する 似たようなライブラリと思われるもの・・・PETE, Daixtrose []#include[] []<boost/assert.hpp>[] []#include[] []<boost/xpressive/detail/proto/proto.hpp>[] []#include[] []<boost/xpressive/detail/proto/compiler/fold.hpp>[]</boost/xpressive/detail/proto/compiler/fold.hpp></boost/xpressive/detail/proto/proto.hpp></boost/assert.hpp>
Rangeを受け取りRangeを返す関数を連続で呼び出すとき h(g(f(rng))) を rng | f | g | h のように"手続き的に"書ける Boost.RangeExのboost::adaptor名前空間にあります 名前が提案と違って過去分詞ではないので注意 見た目に反して、あるRangeへの実装はす…
手前の型に依存する型でないテンプレート仮引数による部分特殊化はできない boost::mpl::vector_cはlongで決めうちなのでそれ以上のサイズの型では切り捨てが起こる []#include[] []<boost/mpl/vector_c.hpp>[][]template[][]< [][]class[] []T[][], [][]T[] []t[][] >[] []struct[] </boost/mpl/vector_c.hpp>…
関数にするほどでもない時に。 []// C[] []int[] []x[][], [][]a[][], [][]b[][];[] []a[][] = [][]f[][]();[] []b[][] = [][]g[][]([][]a[][]);[] []x[][] = [][]h[][]([][]b[][]);[][]// C++ ?[] []int[] []a[][] = [][]f[][]();[] []int[] []b[][] = [][]…
戻り値にsub_rangeを使うと、一時オブジェクトによって意図しないconst性が付加されてしまう iterator_rangeのconst性は、それが保持するiteratorのconst性に関与しない Boost.StringAlgorithmのように、戻り値には必ずiterator_rangeを使うこと sub_rangeは…
某書とかぶりましたが偶然です []assert[][]([][]marker[][] != [][]s[][].[][]get_cur[][]() && [][]"biscuit::star - Parser must advance on star-operation"[][]);[]
Conditional Love: FOREACH Reduxにあります Foreachに興味ない人でも必見
boost::const_beginがbeginを限定せずに(boost::なしに)呼び出している これがADLを引き起こし、一つのRangeがあるというだけでその名前空間でbeginという名前が使えなくなってしまう boost::beginを呼び出すべきだと思う クラス名までADLに取り込んでしまう…
Eclipse風
C++言語のキーワードを色付けした、はてな用のHTMLの断片を出力します Biscuit Version 1.00.4 以降の"libs/test/"にあります Mingw32(英語のみ)とVC++7.1で動作確認 ディレクティブにはほとんど対応していません 以下、自分自身で色付けされたソースコード…
((や[は特別な意味を持つので数値文字参照を使ってエスケープしなければならない キーワードと見なされないように[]のペアで囲まなければならない ペアの[]は複数行にまたがってはならない また、タグを飛び越してはならない Boost.Regexの色付けのサンプル…