ホームページ > バックエンド開発 > C++ > C で厳密に型指定された列挙型を整数に変換するにはどうすればよいですか?

C で厳密に型指定された列挙型を整数に変換するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-08 20:48:02
オリジナル
517 人が閲覧しました

How to Convert Strongly Typed Enums to Integers in C  ?

厳密に型指定された列挙型の Int への暗黙的な変換

C では、厳密に型指定された列挙型は、従来の列挙型と比較して安全性が強化された比較的新しい機能です。列挙型。これらの型の違いの 1 つは、厳密に型指定された列挙型は暗黙的に整数に変換できないことです。この動作は、意図しない変換を防ぐために意図的に行われています。

ただし、特定のシナリオでは、厳密に型指定された列挙値を整数に変換する必要がある場合があります。このような場合、static_cast 演算子を使用できます。ただし、キャストで基になる整数型を明示的に指定する必要があります。

<code class="cpp">enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  int value = static_cast<int>(b::B2); // Explicit cast required
  std::cout << foo(value) << std::endl;
}
ログイン後にコピー

基になる型を明示的に指定したくない場合は、次のようなテンプレート関数を使用できます。

<code class="cpp">template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
    return static_cast<typename std::underlying_type<E>::type>(e);
}

int main(void) {
  std::cout << foo(to_underlying(b::B2)) << std::endl; // No explicit cast needed
}</code>
ログイン後にコピー

このテンプレート関数を使用すると、厳密に型指定された列挙値を整数に変換する必要があるたびに、基になる型を指定する必要がなくなります。これは、より簡潔で再利用可能なソリューションを提供します。

以上がC で厳密に型指定された列挙型を整数に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート