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

さよならlocale

世界で二人しか使っていないcpp_to_hatenaを更新しました ついでに一年間のいろんなコードをまとめておきました libs/biscuit/exampleフォルダにあります・・・ダウンロード 使えるファイルをUTF8のみにしました (英語だけならそのままでOK) MinGWでも日本語…

Const reference vs Copy

C++

当然答えは分からず 参照 参照

ADL Barrier

名前空間を限定しないで関数を呼び出すと、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型へのキャストについて・・・参照 コンパイラによってまちまちのようだ というわ…

Use ATL7/WTL under VCExpress

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…

Argument Dependent Lookup Trigger

Boost.Serializationで発見。正式名称は不明・・・参照 引数adl_triggerによってADLを意図的に引き起こす ADLは、テンプレートのインスタンス生成地点(2nd phase)から名前を探すことができる カスタマイズする側は、提供される名前空間xxx_overloadにオーバ…

utf8_decode_range

前回のはイテレータを直接使っているので見づらいです それらをboost::iterator_rangeを使ってRangeにしました・・・ダウンロード []#include[] []<fstream>[] []#include[] []<iterator>[] []#include[] []<string>[] []#include[] []<boost/cstdint.hpp>[]</boost/cstdint.hpp></string></iterator></fstream>

Boost.UnicodeIterator

Boost.Regexにこっそりあるのを発見 utf8_codecvt_facetというのもあるらしい 以下、UTF-8のxmlファイルからコメントを抽出するコード ところで、をインクルードすると、std::equalがstd::mismatchを'std::'を付けずに呼び出している(実装がある)ので、それ…

Version 1.09

全く関係ないですがついでに・・・ダウンロード Windows Media Player 9のデフォルトのスキンCoronaの不具合を直したものです

boolean_cast

BOOLとboolを変換します・・・ダウンロード BOOLとboolの暗黙の変換は安全ですが警告がでます それを消そうとして return ::SomeAPI() == TRUE; とするのは危険です 成功の値としてTRUE(1)ではなく「0ではない」値を返すAPIがあるから static_castは意味が多…

はてなリング

C++

C++言語のはてなリングができています・・・http://cpp.ring.hatena.ne.jp/

The Biscuit Parser Library

ひとまず完成・・・ダウンロード YARDのBoostへの移植です Expression Templateを手作りすることによって小さく速いコードを生成します Boost.SpiritやBoost.Xpressiveはオブジェクトから作ります VC6でもなんとか動きます []using[] []namespace[] []biscui…

変数名推論

tupleの場合はできます "推論"に、使用する関数の仮引数の型を使える場合もあります (auto_element) []#include[] []<set>[]</set>

Boost.Futures

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::iterator_castとauto_base

Boost.RangeExに含まれ、Boost.IteratorのIterator adaptorの元になったiteratorを取り出します auto_baseはcast先の型としてauto_baseを渡す関数の仮引数の型を使います 実装は、「cast先の型と一致するまで、再帰的にbase()メンバ関数を呼び出す」というこ…

Boost.ScopeGuard

Boost.MultiIndexにこっそりある。Vaultにもある おおもとの解説。 こんなものも。 Type ErasureとRAIIの二つをからめたテクニック Boost.ForeachはType Erasureにのみ使っているようだ 汎用的なRAII担当の型はauto_ptr等とは違って複雑になってしまうのでTy…

Boost.Proto

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 adapters

Rangeを受け取りRangeを返す関数を連続で呼び出すとき h(g(f(rng))) を rng | f | g | h のように"手続き的に"書ける Boost.RangeExのboost::adaptor名前空間にあります 名前が提案と違って過去分詞ではないので注意 見た目に反して、あるRangeへの実装はす…

14.5.4 -9- Class template partial specializationsの制限

手前の型に依存する型でないテンプレート仮引数による部分特殊化はできない 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[][] = [][]…

boost::iterator_rangeとboost::sub_rangeの違い

戻り値にsub_rangeを使うと、一時オブジェクトによって意図しないconst性が付加されてしまう iterator_rangeのconst性は、それが保持するiteratorのconst性に関与しない Boost.StringAlgorithmのように、戻り値には必ずiterator_rangeを使うこと sub_rangeは…

assertでメッセージを表示する

某書とかぶりましたが偶然です []assert[][]([][]marker[][] != [][]s[][].[][]get_cur[][]() && [][]"biscuit::star - Parser must advance on star-operation"[][]);[]

Boost.Foreachの実装の説明

Conditional Love: FOREACH Reduxにあります Foreachに興味ない人でも必見

Argument-Dependent Lookup Barrier

C++

boost::const_beginがbeginを限定せずに(boost::なしに)呼び出している これがADLを引き起こし、一つのRangeがあるというだけでその名前空間でbeginという名前が使えなくなってしまう boost::beginを呼び出すべきだと思う クラス名までADLに取り込んでしまう…

cpp_to_hatenaのスタイルシートの例

Eclipse風

cpp_to_hatena

C++言語のキーワードを色付けした、はてな用のHTMLの断片を出力します Biscuit Version 1.00.4 以降の"libs/test/"にあります Mingw32(英語のみ)とVC++7.1で動作確認 ディレクティブにはほとんど対応していません 以下、自分自身で色付けされたソースコード…

cpp_to_hatenaの実装のメモ

((や[は特別な意味を持つので数値文字参照を使ってエスケープしなければならない キーワードと見なされないように[]のペアで囲まなければならない ペアの[]は複数行にまたがってはならない また、タグを飛び越してはならない Boost.Regexの色付けのサンプル…