Enums con ámbito en C++
enum class mantiene los enumeradores fuera del ámbito circundante y lejos del int implícito.
#include <string_view>
enum class Level { debug, info, warning, error };
constexpr std::string_view name_of(Level lvl) {
switch (lvl) {
case Level::debug: return "debug";
case Level::info: return "info";
case Level::warning: return "warning";
case Level::error: return "error";
}
return "unknown";
}
static_assert(name_of(Level::warning) == "warning");
static_assert(static_cast<int>(Level::error) == 3);
Cómo funciona
Level::debughastaLevel::errorse escriben con su ámbito — nada dedebuga secas.- El
switchcubre cada enumerador, así el compilador puede probar que no falta ninguno. - Sin conversión implícita: obtener el
3subyacente exige unstatic_cast<int>explícito.
Palabras clave y builtins usados aquí
caseclassconstexprenumintreturnstatic_assertstatic_castswitch
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 414
- Tokens
- 116
- Ritmo de tres estrellas
- 80 tpm
Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 87 segundos.
Paso 3 de 3 en Toques modernos; paso 24 de 27 en Fundamentos del lenguaje.