2008-11-01から1ヶ月間の記事一覧

まだまだ先は長い。

とりあえずboost::shared_ptrは攻略できたと思います。 次の目標はboost::spirit。軽く見たけど挫折しそうです。。。その前にboost::functionを作りましょうか。boost::spiritでも必要ですし。 loki::Functorに比べると見た目が断然いいですね。TypeListを使…

メタ関数2

C++

if_ boost::mpl::if_、boost::mpl::if_cTHE BOOST MPL LIBRARY 特殊化を使うと条件の真偽によって型の選択ができます。それをif_というメタ関数にしましょう。 boostでは true/falseを直接渡す→if_c メタ関数の結果としてtrue/falseのvalueを渡す→if_ となっ…

再帰テンプレート

C++

正式な呼び方かどうかわかりませんが、テンプレートを再帰的に呼び出すという意味です。 プログラムには連接・選択・反復の3つの要素が必要ですが、テンプレートを使用した連接・選択は今まで見てきた通りですね。 で、最後に反復をテンプレートの再帰呼び…

メタ関数1

C++

コンパイル時に、型・定数を引数として受け取り、それを加工して型・定数を返すclass template。typedef・enum・static constで戻り値を返す。 基本形は以下の通り。 //argを引数として受け取り、そのままtypeとして返すメタ関数 template< typename arg > s…

traits

C++

特性。テンプレート引数に渡された型、定数によって動作を切り替える。 例えば、shared_ptrでvoidを渡すと、 shared_ptr< void > p; operator*()の戻り値の型がvoid&になるのでコンパイルエラーになってしまいます。 template < typename T > class shared_p…

xbox360の修理

先週故障したxbox360は実質1週間も使ってないので、初期不良として交換できるか聞いてみましたが、やっぱりダメでした。。。 買ったのが9月だったので、せめて9月中であれば交換できたとか。 一緒に買ったインフィニット アンディスカバリーを2〜3日プレイ…

shared_ptrの実装7

C++

deleter 前回のまとめ(shared_ptrの実装6 - while( c++ );)でいきなり出てきたdeleterによる削除について。例えば、あるクラスの生成と破棄を行うライブラリがある時、 hoge.h class IHoge{ ... }; IHoge* Create(); void Delete( Hoge* p ); hoge.cpp cla…

テンプレートでメンバ関数がコンパイルされるタイミング

C++

前回のshared_ptrの実装4 - while( c++ );で template < typename T > class shared_ptr { ...略 reference operator*()const { return *ptr; } }; int main() { shared_ptr< void > p; //←このタイミングでoperator*もコンパイルされると思っていた。。。 r…

shared_ptrの実装6

C++

ここまでのまとめ shared_ptrでは参照カウンタの管理、インスタンスの管理が完全に隠蔽されている。 可能なこと shared_ptr pimplイディオム(不完全型クラスを使った宣言) 暗黙のアップキャスト deleterによる削除 未実装 weak_ptrへの変換 適当なクラス図…

shared_ptrまとめ

日本語ドキュメントshared_ptr、weak_ptr boost勉強会http://www.ustream.tv/recorded/2981654 Smart Pointer Programming Techniques 実装してみた shared_ptrの実装1 - while( c++ ); shared_ptrの実装2 - while( c++ ); shared_ptrの実装3 - while( c++ )…

shared_ptrの実装5

C++

shared_ptrで任意のインスタンスをdeleteする 前回のshared_ptrの実装4 - while( c++ );で shared_ptr< void > a( new int( 100 ) ); とすると、デストラクタで正しくdeleteされません。今日はこれを解決しましょう。問題になっているのは delete void*; で…

shared_ptrの実装4

C++

前回の続き 一応スマートポインタらしく動作するshared_ptr風のクラスができましたが、何かダサいですね。美しくない。boost::shared_ptrと比較すると、全くの別物であることがわかります。参照カウンタなどの内部の実装がそのまま見えてしまっているのはよ…

shared_ptrの実装3

C++

前回の続き では、実際に参照カウンタ式のスマートポインタを作ってみましょう。 参照カウンタを追加 たとえば以下のような場合、new intの実体と参照数が共有されるので、参照カウンタも動的に作らないといけませんね。 shared_ptr< int > a( new int( 100 …

shared_ptrの実装2

C++

前回の続き smart_ptr< int > a( new int( 1 ) ); smart_ptr< int > b = a; このようにスマートポインタをコピーコンストラクタでそのままコピーすると、メンバのptrがそのままコピーされるので、new intで生成した実体を指すポインタが2つできてしまいます…

shared_ptrの実装1

C++

boostといえばスマートポインタ。 C言語からC++に移るときに最も感動したものがスマートポインタだったと思います。 スコープから抜けるときに誰からも参照されなくなったオブジェクトを自動的にdeleteしてくれるポインタクラスですね。 class Hoge{ ... }; …

reinventing the wheel

C++

現在C++の勉強のためにboostを自分で実装してます。「四角い車輪の再発明」にならないよう気をつけます。 参考にしているサイト boost本家 Kazuhiro Inaba Let's Boost Faith and Brave - C++で遊ぼう p_stade;

xbox360

トータル20時間程度しか触ってないxbox360が故障しました。。。 急にDVDドライブからガリガリ音がして、「読み取れません。布で拭いてください、再起動してください」的なエラーメッセージ。ちなみにソフトはラストレムナントです。 ほかのソフト(とい…

なんとなく日記を。

基本的にプログラム系のネタです。 最近はtemplateにハマってます。 C++大好きです。 C++は「しーぷら」と呼んでます。デフォではないようですね。