タイプセーフなenumが欲しいねぇ

via C++におけるタイプセーフEnumのイディオム - どことなく技術屋な日々様。
{C++におけるタイプセーフEnumのイディオム}
(どこかからの引用。どこで見たかは忘れました……。すみません)
id: hanahiさんの頁でした。そして、URLを見たらbleis_tiftさんのサイトでした。気付いてませんでしたorz.


C++によるタイプセーフなenum実装があったので試してみたんですが、
やっぱりタイプセーフは嬉しいけど、ちょっと冗長だよねぇ。
まぁ、40行程度なので「がまんせいよ」という意見もあるわけだけど、
メンテのコストが上昇するのと、
幾つもenumをつくりたい場合はなんとなく「うへぇ」となる。

あとは

    HogeStatus s = HogeStatus::poison;
    
    switch (s.toEnum()) {
    case HogeStatus::POISON:
        printf("POISON?n");
        break;
    case HogeStatus::PARALYSIS:
        printf("PARALYSIS?n");
        break;
    case HogeStatus::WEAKNESS:
        printf("WEAKNESS?n");
        break;
    }

みたいな感じになるので、違和感がないでもない。
要するにタイプセーフのためにオブジェクトとして宣言してある

  • poison
  • paralysis
  • weakness

と、定数enumとして宣言されている、

  • POISON
  • PARALYSIS
  • WEAKNESS

があるためだ。

まぁ、仕方がないんだけどね……。
機会があれば使ってみるかなぁ。