Tengo una solución con casos de cambio, pero hay muchos casos, por lo que clang-tidy advierte sobre esa función. Mi motivo es disminuir el tamaño de la función. ¿Hay alguna manera que podamos hacer para disminuir el tamaño de la función?
Como la clase de enumeración se puede usar como clave para std::map , puede usar el mapa para mantener la relación de la cadena de enumeración <->, así:
enum class test_enum { first, second, third }; const char* to_string(test_enum val) { static const std::map<test_enum,const char*> dict = { { test_enum::first, "first" }, { test_enum::second, "second" }, { test_enum::third, "third" } }; auto tmp = dict.find(val); return (tmp != dict.end()) ? tmp->second : "<unknown>"; }C++ no tiene reflejo, por lo que el mapa no se puede llenar automáticamente; sin embargo, se puede usar extensiones específicas del compilador (por ejemplo, como la extensión __PRETTY_FUNCTION__ para GCC), por ejemplo, como en la biblioteca magic_enum