列挙型

この記事は最終更新日から 20 年以上が経過しています。

Win32APIのCreateFileとReadFile/WriteFileが引数が多くて面倒くさいので、C#のFileStreamっぽくラッパーして簡単に使えるようにしようと思ったんですけど、これがなかなかC#のようには上手くいきませんでした。:'(

原因は列挙型の仕様。
C#の列挙型は、C++で言うと、クラスのstatic変数のようにしてアクセスします。
こんな感じです。1

private enum Week {
    Sun = 0x01,
    Mon = 0x02,
    Tue = 0x04,
    Wed = 0x08,
    Thu = 0x10,
    Fri = 0x20,
    Sat = 0x40,
};
Week w = Week.Wed;

きっとIDEの利用も意識した仕様なんでしょうね。
これだとWeek.まで打った時点でそこに含まれる要素がリスト表示されるのでとても便利です。
さて、この手軽さをC++で実現しようと思ったら……やっぱりクラスでしょうか?
マクロの#defineやC++のenumで実現しようとすると、結局API使うのと大差なくなってしまう気がするのです。23


  1. 最後の要素の後にカンマがあっても許される嬉しい仕様です。 ↩︎

  2. 多少の簡略化は出来ますけどね。 ↩︎

  3. ってか、100できないと50するのも諦めちゃうのは悪い癖。 ↩︎