|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
20.06.2012, 09:46 | #1 |
Администратор
|
Прокрутить Enum
Дано:
1. Код:
enum Params { PARAM_1 = 0x00000001, PARAM_2 = 0x00000002, PARAM_3 = 0x00000004, PARAM_4 = 0x00000008, PARAM_5 = 0x00000010 }; Задача: прокрутить енум, найти параметры, не входящие в битмаску, и вывести в лог названия параметров (PARAM_*). Как найти параметры, входящие или не входящие в битмаску, я знаю, проблема в прокручивании енума и получении названия параметров. Для чего: пишу патч, в котором надо сделать проверку на соответствие флагов и вывести в лог названия отсутствующих флагов. Заранее спасибо. |
20.06.2012, 10:32 | #2 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Хех, у самого такая задача стояла Но так как я пишу на Qt там было проще благодаря метасистеме классу QMetaEnum
На чистых плюсах не знаю даже. Если бы было просто, то наверняка названия опкодов брали бы из енумов, а не регистрировали строковое значение.
__________________
SpellWork Qt4 |
20.06.2012, 14:46 | #3 |
Новичок
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
|
|
20.06.2012, 16:29 | #4 |
Администратор
|
Есть именно енум, а не массив строк.
В идеале надо из этого енума сформировать что-то типа ассоциативного массива, в котором ключами будут значения енума, а значениями - названия ключей енума, чтобы можно было в лог ошибок писать aParams[8] (формат из другого языка) для вставки названия параметра. |
20.06.2012, 18:42 | #5 |
Новичок
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
|
хе-хе, я ведь говорю о практически возможном способе, а не об идеале, которого для чистого С++ нет
вам в любом случае нужно будет сформировать этот массив, ручками, программой или препроцессором. |
12.07.2012, 22:34 | #6 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Задача в исходном виде нерешаемая, имена параметров енума известны только в компайл-тайм, в ран-тайм остаются только числовые значения.
Для решения необходимо позаботиться о сохранении имен параметров в ран-тайме, например при помощи std:map<int, std:string>, ну или любой другой вариант. Для чистого enuma - задача нерешаемая. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10230] Avoid use enum valuse/define like naming style for enum type name. | newsbot | CMaNGOS Commits | 0 | 20.07.2010 00:20 |
Fixed typo in enum value name. | newsbot | CMaNGOS Commits | 0 | 15.07.2010 21:00 |
Replaced hardcoded value with enum. | newsbot | CMaNGOS Commits | 0 | 11.05.2010 15:50 |
Updated AuthResult enum. | newsbot | CMaNGOS Commits | 0 | 05.04.2010 13:20 |
[9631] Fix enum names. | newsbot | CMaNGOS Commits | 0 | 27.03.2010 21:20 |