1. ホーム
  2. c++

[解決済み] (enumの項目を数えるには?

2022-11-25 15:13:24

質問

この質問は、次のようなときに思いつきました。

enum Folders {FA, FB, FC};

で、各フォルダに対してコンテナの配列を作成したいと考えました。

ContainerClass*m_containers[3];
....
m_containers[FA] = ...; // etc.

(マップを使うとよりエレガントです。 std::map<Folders, ContainerClass*> m_containers; )

しかし、私の最初の質問に戻ってきます。配列のサイズをハードコードしたくない場合、フォルダーにいくつのアイテムがあるのかを把握する方法はありますか?(例えば FC がリストの最後の項目であることに依存せず、次のようなことを可能にします。 ContainerClass*m_containers[FC+1] のようになります。)

どのように解決するのですか?

これを行うための良い方法はありません。通常は、列挙の中に余分な項目が表示されます。

enum foobar {foo, bar, baz, quz, FOOBAR_NR_ITEMS};

では、できるようになります。

int fuz[FOOBAR_NR_ITEMS];

それでもあまりいいとは言えませんが。

しかし、もちろん、enumの項目の数だけでは安全でないことは、例えば、与えられた

enum foobar {foo, bar = 5, baz, quz = 20};

の場合、項目数は4となりますが、enum値の整数値は配列のインデックス範囲から大きく外れてしまいます。配列のインデックスにenum値を使用することは安全ではないので、他のオプションを検討する必要があります。

edit: 要望があったので、特別なエントリをより目立つようにしました。