この前のタイプコードをクラスで置き換えるという日記(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, };