Как можно создать структуру для использования значений, аналогичную приведенной в следующем коде, вместе с возможностью вывода их через `cout` в C++: ```cpp enum OBJ { OBJ = 0 }; enum SOMETHING { SOMETHING = 7, SOMETHING1 = 1, SOMETHING2 = 2 }; ```
Да, можно создать вложенное перечисление в языках C/C++. Для этого можно определить структуру, в которой будут содержаться перечисления. Пример: ```cpp #include <iostream> struct MyEnums { enum OBJ { OBJ = 0 }; enum SOMETHING { SOMETHING = 7, SOMETHING1 = 1, SOMETHING2 = 2 }; }; int main() { std::cout << MyEnums::OBJ::OBJ << std::endl; std::cout << MyEnums::SOMETHING::SOMETHING << std::endl; std::cout << MyEnums::SOMETHING::SOMETHING1 << std::endl; std::cout << MyEnums::SOMETHING::SOMETHING2 << std::endl; return 0; } ``` В данном примере структура `MyEnums` содержит два вложенных перечисления `OBJ` и `SOMETHING`. После этого в `main()` мы можем обращаться к значениям перечислений через оператор разрешения области видимости `::`.
Если мы говорим про C, то так делать нельзя:
1. Вложенные в enum определения делать нельзя - это ограничение самого синтаксиса ( дока )
2. Для использования перечислений не надо указывать само название перечисления. Т.е. неOBJ::SOMETHING
, а простоSOMETHING
. Т.е. видимость глобальная и нельзя дублировать названия, даже для разных enum
В случае C++ аналогично. Есть хак - использование неймспейсов или структур для топ левела, но не в твоем случае - ты хочешь топ левел перечислениям значения задавать
На мой взгляд тут решение:
1. Разбить их на различные перечисления
2. Добавить каждому префикс
enum OBJ = 0 { Default = 0, Something_Something1 = 1, Something_Something1 = 2, Something = 7 };