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

delegate5

前回delegate4 - while( c++ );の続き。以下のようなプログラムでフォームに対してボタンを配置することが出来る様になりました。 class HogeForm : public Form { private: ButtonPtr button1; ButtonPtr button2; public: HogeForm() : Form() , button1( …

delegate4

前回delegate3-C#風windowsアプリ - while( c++ );の続き。 日があいてしまったので、別エントリに書きます。 class.h アプリケーションで使用しているnamespace、クラス、列挙型の一覧を記述しておきます。 shared_ptrで管理するクラスはdef_managed_class…

delegate3-C#風windowsアプリ

以前の http://d.hatena.ne.jp/setuna-kanata/20081207/1228668906 delegate2 - while( c++ ); を使って、C#に近い形でwindowsアプリを作ってみます。もちろんC++/nativeです。 C#・C++/CLIを使え、とか突っ込まないで下さいw 目標 Formを継承したメインフ…

delegate2

C++

delegate1-boost::signalを読む - while( c++ );の続き。何となくboost::signalの仕組みがわかってきたので実装してみます。 目標 int hoge( int, float ) { return 1; } struct piyo { int operator()( int, float ) { return 2; } }; class fuga { public:…

xbox360光学ドライブ故障に関して-Final-

やっと直りました〜。 ちょうど1ヶ月ですね。 某カメラに修理を頼んだのが11月23日で、修理報告書に書いてある受付日が12月2日。 修理開始までに1週間以上かかるなんて。。。 修理完了日が12月18日。修理自体、意外に時間がかかるんですね。 手元に届いたの…

xbox360光学ドライブ故障に関して。

修理に出して4週間経過しましたがまだ戻ってきません。。。 販売元の某量販店に持って行ったのが失敗だったようです。 マイクロソフトに直接送れば確か10日前後で帰ってくるはずです。いつになればプレイできるんでしょうか? ところで、こんな記事を見つけ…

delegate1-boost::signalを読む

C++

C++でC#っぽいdelegateを作ってみよう、というよくあるネタです。 というか、boost::signalですね。 ここBoost.Signals �`���[�g���A��を読むと非常に面白いです。 delegateを実装する際、戻り値の扱いをどうしようか迷っていたのですが、ここに解決策があり…

function-まとめ

とりあえず最低限の機能だけです。 function1 - while( c++ ); function2 - while( c++ ); function3-mem_fun - while( c++ ); function4-mem_fun - while( c++ ); function5-bind - while( c++ ); function6-bind - while( c++ ); function7-placeholder - …

function9-perlを使ってみる

絶望した!preprocessorに絶望した! 可読性が悪すぎですね。。。 VCでデバッグするのも一苦労です。 偉い人が言ってましたが、「使っておいしいものは使え。使えるものは使うな。」 まさにこれですね。 ということで、perl使ってみましょう。とりあえずwind…

function7-placeholder

C++

前回function6-bind - while( c++ );の続き。 preprocessorを使うのはある程度完成に近づいてからのほうが良さそうなので、先にplaceholderに対応させます。 今日の目標 placeholderを使えるように。 class fuga { public: int func( int, float ) { std::co…

function8-function+bind

C++

前回function7-placeholder - while( c++ );の続き。以前function2 - while( c++ );のサンプルを多少修正したfunctionです。 operator=でcontentの設定 //function.contentが0の場合に投げる例外 class bad_function_call{}; //基本形 template< typename T …

function6-bind

C++

function5-bind - while( c++ );の続き。 メンバ関数用bind メンバ関数を呼び出すためには 戻り値 呼び出し元クラスのインスタンスの参照又はポインタ メンバ関数のアドレス 引数 が必要です。 呼び出し元の参照・ポインタを別で持たせてしまうと、グローバ…

function5-bind

C++

前回function4-mem_fun - while( c++ );の続き。 boost::functionはboost::bindと組み合わせて使うと非常に便利なので、boost::bindと同等の機能をもつbindクラスを作ってみましょう。 ただしplaceholderがあると複雑になるので、まずはplaceholder無しのbin…

function4-mem_fun

C++

前回function3-mem_fun - while( c++ );の修正。以下のように、 Tの参照 Tへのポインタ shared_ptr を受け取って、すべて同一の書き方で呼び出せるようなmem_funを作ります。 class Hoge { public: int func( int, float ) { return 1; } }; template< typen…

サンプルを落とせるようにしました。

5,6年ぶりに自分のサイトを活用しますw基本的にVC++2008ExpressEditionで動作するサンプルのみです。 可能な限りデバッグはしているつもりですが、正確性、安全性等を保証するものではありません。 これらの情報を使用することによって生ずるいかなる損…

function3-mem_fun

C++

前回function2 - while( c++ );の続き。いろいろ勘違いしていたので書き直し

C++でjava風リスナを実装する

前回いまさらwindowsプログラミング - while( c++ );のプログラムにリスナを追加してみます。 今日の目標 WindowListenerインターフェイスを実装した派生クラスをウィンドウに追加する。 WindowClosing()でSystem::Exit()を呼び出すと、プログラムが終了する…

いまさらwindowsプログラミング

ちょっと気分転換で、windowsプログラミングを。 VC++ExpressEditionを使っています。 WinMain #include <windows.h> int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { return 0; } これまでのようにcoutで出力できるように、コンソールを割り当てましょう。 </windows.h>…

function2

C++

前回function1 - while( c++ );の続き。 テンプレート引数に戻り値、引数の型を指定して、通常の関数を格納することが出来ました。 int hoge( int, float ){ /*...*/ } int main() { function< int ( int, float ) > a( hoge ); int b = a( 1, 2.0f ); //hog…

function1

C++

今日はboost::functionについて。 日記を書き始めるきっかけになったものです。 boost::functionの実装のために情報を探していた際、以下のエントリを見つけて感動しました。 Boost.Functionの実装技術(1) - Type Erasure - Faith and Brave - C++で遊ぼう 2…

preprocessor

C++

boost::function実装時にあると便利です。 トークンの連結 #define pp_cat( a, b ) a##b 引数で渡したa、bが連結されてabになります。 int pp_cat( a, b ) = 0; //int ab = 0; しかし、以下のように引数に自分自身を渡すとコンパイル時に展開されません。 in…

C++って難しいですよね。

ぶっちゃけ、自分が書いている内容はN番煎じの超劣化コピーなんですよね。もう少し特化しないと意味ないですねぇ。 それにしても、5年後、10年後にはC++0xが標準になっていると思うと。。。私はC言語から始めましたが、5年後にはC++0xから始めるのが普通にな…

まだまだ先は長い。

とりあえず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…