厳密に型指定された列挙型の 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 サイトの他の関連記事を参照してください。