![][1]У перечислений есть множество способов применения в разработке. Например, при создании игр они используются для программирования состояний персонажа или возможных направлений движения:
enum State {Idle, Fidget, Walk, Scan, Attack};
enum Direction {North, South, East, West};
Гораздо удобнее, когда во время отладки в консоль выводится сообщение типа “`State: Fidget`” вместо “`State: 1`”. Также частенько бывает нужно сериализировать перечисления в JSON, YAML или иной формат, причём в виде строковых значений. Помимо того, что строковые воспринимать легче, чем числа, их применение в формате сериализации повышает устойчивость к изменениям численных значений констант перечислений. В идеале, `"Fidget"` должен ссылаться на `Fidget`, даже если объявлена новая константа, а `Fidget `имеет значение, отличное от 1. К сожалению, в С++ нет возможности легко конвертировать значения перечислений в строковые и обратно. Поэтому разработчики вынуждены прибегать к разным ухищрениям, которые требуют определённой поддержки: жёстко закодированным преобразованиям или к использованию неприглядного ограничительного синтаксиса, наподобие Х-макросов. Кто-то дополнительно использует средства сборки для автоматического преобразования. Естественно, это только усложняет процесс разработки. Ведь перечисления имеют свой собственный синтаксис и хранятся в собственных входных файлах, что не облегчает работу средств сборки в Makefile или файлах проекта. Однако средствами С++ можно гораздо проще решить задачу преобразования перечислений в строковые. [Читать дальше →][2]
[1]:
https://habrastorage.org/files/78b/169/bb1/78b169bb1e7048bbbf902bbaad599a9b.png
[2]:
https://habrahabr.ru/post/277757/#habracut