2004年11月10日水曜日

Ganttproject

Ganttproject なるものをたまたまsourceforgeで見つけたので触ってみたらなかなか良さそう。
今度ガントチャートを書く必要に迫られたら使ってみようと思います。

2004年10月23日土曜日

Win32 GUI Generics

Win32 GUI Generics というライブラリを見つけました。
Windows の GUI プログラミングをかなりC++っぽくできそうで、かなり興味ありです。
でもまだまだ発展途上のようで、今後に期待!
WTL とどちらが使いやすいかな?

2004年10月12日火曜日

Numerical Recipes in C

9月は本買いませんでしたが、10月は Numerical Recipes in C を買いました。
数値計算の問題にあたったときに手元あれば便利ですね。
内容はぱらぱらとしか読んでいませんが、面白そうな項目から目を通していこうかなと。

ちなみに、洋書では新しい版が出ているらしいですが、日本のも改訂されないのかなー。
英語のは、下のURLからオンラインで読むこともできます。
http://www.nr.com/

2004年9月16日木曜日

MFCメモ

モードレスダイアログをつくるとき、newでインスタンスをつくったら
PostNcDestroyをオーバーライドしてその中でdelete thisする。
そうすると、ダイアログが閉じられたときに自動的にdeleteされる。

2004年9月1日水曜日

VisualCの最適化 - 拡張命令セットの有効化

VisualC++2003ではコンパイルオプションに「拡張命令セットの有効化」というのがあります。
これをSSEにすると、なんとCで書いた普通のfloat計算のコードがSSEのスカラー演算命令を使ったコードとしてコンパイルされて出力されます!
今まではsqrtなどの組み込み関数がSSEで最適化されたされたやつに切り替わるくらいかなと思っていたのですが予想以上の効果があるようです。
同様にオプション設定でSSE2を選択するとdouble計算のコードも最適化されるものと思われます。(こっちは未確認)


2004年8月7日土曜日

Hacker's Delight

今月はHacker's Delightを買いました。
かなり以前から欲しいと思っていた本なのですが、後回しになっていました。

内容はまだほとんど読んでいないですが、
ビット演算だけでびっくりするようなことをしています。

計算速度が要求されるようなプログラムを書く人にとってはすごく参考になる本です。

2004年7月16日金曜日

メンバ関数テンプレートの部分特殊化 vs オーバーロード

メンバ関数テンプレートの挙動を、とある引数に対してのみ変更したい場合の選択肢としてテンプレートの特殊化オーバーロードがあります。

struct ClassA {
  // メンバ関数テンプレート
  template<typename T> void Func(T value) {
    ...
  }

  // テンプレートの特殊化
  template<> void Func<int>(int value) {
    ...
  }

  // オーバーロード
  void Func(float value) {
    ...
  }
};

優柔不断な自分はここで、テンプレートの特殊化にするかオーバーロードにするか悩みました。
で、それぞれのメリット・デメリットを考えてみました。

テンプレートの特殊化
メリット
・ClassAを定義しているヘッダファイルを変更することなく、新しい特殊化を追加できる。
例えば、

ファイル ClassA.h
struct ClassA {
  // テンプレートメンバ関数
  template<typename T> void Func(T value) {
    ...
  }
};


ファイル ClassAUserImpl.cpp
#include "ClassA.h"

// テンプレートの特殊化
template<> void ClassA::Func<int>(int value) {
  ...
}


ということが可能で、特殊化に関しては「クラスの使用者側で必要になり次第勝手に(自己責任で!)特殊化してください」ということができます。
これはメリットであると共にデメリットにもなりうるかもしれません。

デメリット
・古いコンパイラだとテンプレートの部分特殊化を使用できない。

オーバーロード
メリット
・テンプレートではないのでメンバ関数の実装をインラインに書く必要がない。
・C++の基本なので読みやすい(?)

デメリット
・特になし


ちなみに、テンプレートの特殊化とオーバーロードを同じ型に対して同時に行うとどうなるのかと思って試してみたところ、オーバーロードが優先されました。(VC7.1)

  © Blogger template 'Isolation' by Ourblogtemplates.com 2008

Back to TOP