2007年2月23日金曜日

templateクラスでMFCのメッセージ処理

templateクラスでMFCのメッセージハンドラを使おうと思ったんですが、肝心のBEGIN_MESSAGE_MAPが書けない!

と思って調べてみたら色々出てきました。

MSDNのもヒットして、ちゃんとMSDNにも載ってるんだなーと思って読んでいたら、
VC8でちゃっかりBEGIN_TEMPLATE_MESSAGE_MAPなるマクロが追加されているではないですか!
やるなぁ。ありがたく使わせて頂きます。

How to: Create a Message Map for a Template Class

2007年2月19日月曜日

std::auto_ptrの新たな罠(VC8)

VC8では以下のコードがあっさりコンパイルされるようです。

std::auto_ptr<int> p(new char);


これのせいでバッファオーバーフローに半日悩まされました。どう考えても罠です!親切でもなんでもないです。キャストしたかったら自分でします!
boost::shared_ptr使うほどでもないかなというケースでstd::auto_ptr使っていましたがそれすらやめたほうがよさそうですね。。

ちなみに、VC7.1でもgcc 3.4.4でも確認してみましたが、コンパイルエラーになりました。
そりゃ普通そうですよね。

2007年1月29日月曜日

FreeBSDハードディスク交換

FreeBSD環境のハードディスクを交換する際に、古いディスクの内容をまるごと新しいディスクに移す際の手順。

1. 古いHDDをプライマリ、新しいHDDをセカンダリに接続して起動

2. 古いHDDに新しいディスクのマウント先ディレクトリを作成しておく。(スライスの構成と同じだけ)

mkdir /mnt
mkdir /mnt/var
mkdir /mnt/tmp
mkdir /mnt/usr


2. 古いHDDと同じような構成で、新しいHDDのパーティションを切る。
sysinstall -> Fdisk

3. 古いHDDと同じような構成で、新しいHDDのスライスを設定する。
マウント先は先ほど作成したディレクトリ。
sysinstall -> label

4. 各スライスをコピーする
dump -0af - -C 32 / | ( cd /mnt ; restore xf - )
dump -0af - -C 32 /var | ( cd /mnt/var ; restore xf - )
dump -0af - -C 32 /tmp | ( cd /mnt/tmp ; restore xf - )
dump -0af - -C 32 /usr | ( cd /mnt/usr ; restore xf - )



参照:FreeBSD QandA 1859

2007年1月24日水曜日

VisualStudio2005 cppとhファイルの切り替え

VisualStudio 2005でcppファイルとhファイルを切り替えるためのマクロ

参照 BorisJ's Blog

2007年1月17日水曜日

数値解析ソフト

FreeMat
Octave
Scilab

2006年12月22日金曜日

Vector Graphics Library リンク

2D系のベクトルグラフィックスライブラリのリンクをメモ

cairo
Anti-Grain Geometry
Amanith Framework

2006年6月6日火曜日

ビット演算で整数割り算

ビット演算と引き算を使った整数の割り算のコード。
ただし、31bit符号なし整数 ÷ 15bit符号なし整数 という制限つき。

// 31bit unsigned int / 15bit unsigned short
unsigned short divsu(unsigned int x, unsigned short y)
{
 for (int i = 0; i < 16; i++)
 {
  x <<= 1;
  if (x >= (unsigned int)y << 16)
  {
   x -= (unsigned int)y << 16;
   x |= 1;
  }
 }

 return x;
}


参考:ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  © Blogger template 'Isolation' by Ourblogtemplates.com 2008

Back to TOP