1. ホーム
  2. c++

[解決済み] c++のenumクラスの要素数を決定することはできますか?

2023-01-02 18:54:27

質問

c++ のカーディナリティを決定することは可能でしょうか? enum class :

enum class Example { A, B, C, D, E };

を使おうとしたのですが sizeof を使ってみましたが、enum要素の大きさを返してしまいます。

sizeof(Example); // Returns 4 (on my architecture)

基数(私の例では5)を取得する標準的な方法はありますか?

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

直接はできませんが、以下のような仕掛けがあります。

enum class Example { A, B, C, D, E, Count };

次に,カーディナリティは static_cast<int>(Example::Count) .

もちろん、これは enum の値を 0 から自動的に割り当てる場合にのみうまく機能します。 そうでない場合は、手動で正しい基数を Count に割り当てることができますが、これはとにかく別の定数を維持しなければならないことと何ら変わりはありません。

enum class Example { A = 1, B = 2, C = 4, D = 8, E = 16, Count = 5 };

デメリットとしては、コンパイラが Example::Count をenum値の引数として使うことを許してしまうことです。(個人的には、これは実際には問題ないと思っていますが)。