ホームページ > バックエンド開発 > C++ > C で厳密に型指定された列挙型を暗黙的に int に変換する方法

C で厳密に型指定された列挙型を暗黙的に int に変換する方法

Susan Sarandon
リリース: 2024-11-04 12:28:01
オリジナル
687 人が閲覧しました

How to Implicitly Convert Strongly Typed Enums to Ints in C  ?

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

C 11 で導入された厳密に型指定された列挙型は、整数への暗黙的な変換を防ぐように設計されています。ただし、明示的にキャストせずに、厳密に型指定された enum 値を int に変換したい場合があります。

これに対処するために、いくつかのアプローチが提案されています。

  1. 関数の使用:

変換を実行する関数を定義できます。例:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
int to_int(E e) {
  return static_cast<int>(e);
}

int main() {
  // Use the to_int function to convert the strongly typed enum value b::B2 to int
  std::cout << to_int(b::B2) << std::endl;
}</code>
ログイン後にコピー
  1. テンプレート引数推定による関数の使用:

構文を簡略化するために、次のような関数テンプレートを使用できます。列挙型を自動的に推測しますtype:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept {
  return static_cast<typename std::underlying_type<E>::type>(e);
}

int main() {
  // Use the get_underlying function to convert the strongly typed enum value b::B2 to int
  std::cout << get_underlying(b::B2) << std::endl;
}</code>
ログイン後にコピー
  1. マクロの作成:

マクロを利用して変換プロセスをより簡潔にすることもできます:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

#define TO_INT(e) static_cast<int>(e)

int main() {
  // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int
  std::cout << TO_INT(b::B2) << std::endl;
}</code>
ログイン後にコピー

明示的に指定しなくても、厳密に型指定された列挙型を int に変換することは可能ですが、キャストを行うと、意図しない動作が発生する可能性があることに注意することが重要です。潜在的な問題を回避するために、適切な場合は常に明示的なキャストを使用することをお勧めします。

以上がC で厳密に型指定された列挙型を暗黙的に int に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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