厳密に型指定された列挙型の Int への暗黙的な変換
C 11 で導入された厳密に型指定された列挙型は、整数への暗黙的な変換を防ぐように設計されています。ただし、明示的にキャストせずに、厳密に型指定された enum 値を int に変換したい場合があります。
これに対処するために、いくつかのアプローチが提案されています。
変換を実行する関数を定義できます。例:
<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>
構文を簡略化するために、次のような関数テンプレートを使用できます。列挙型を自動的に推測します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>
マクロを利用して変換プロセスをより簡潔にすることもできます:
<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 サイトの他の関連記事を参照してください。