この前のタイプコードをクラスで置き換えるという日記(id:toburau:20070910)を書いていて、C++ならenumでいけるんじゃない?と思って確かめてみた。
class Item
{
public:
typedef enum {
WEAPON,
ARMOR,
SHIELD,
} Type;
private:
Type itemtype;
public:
Item(Type itemtype) {
this->itemtype = itemtype;
}
};
void main()
{
Item* weapon = new Item(Item::WEAPON);
Item* armor = new Item(1); // コンパイルエラー
}Borland C++ Compilerで確認。
おお、ちゃんと型チェックをコンパイル時に行ってくれる。
久しぶりにC++でコードを書いてみたら、なんか書きにくかった。頭がJavaモードになりつつある気がする。Javaのほうが書いていて楽だ。
追記:
enumの部分はtypedefを使わなくても次のように書ける。
enum Type {
WEAPON,
ARMOR,
SHIELD,
};