Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2012, 09:46   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию Прокрутить Enum

Дано:
1.
Код:
enum Params
{
    PARAM_1    = 0x00000001,
    PARAM_2    = 0x00000002,
    PARAM_3    = 0x00000004,
    PARAM_4    = 0x00000008,
    PARAM_5    = 0x00000010
};
2. Битмаска 10.

Задача: прокрутить енум, найти параметры, не входящие в битмаску, и вывести в лог названия параметров (PARAM_*).

Как найти параметры, входящие или не входящие в битмаску, я знаю, проблема в прокручивании енума и получении названия параметров.

Для чего: пишу патч, в котором надо сделать проверку на соответствие флагов и вывести в лог названия отсутствующих флагов.

Заранее спасибо.
virusav вне форума   Ответить с цитированием
Старый 20.06.2012, 10:32   #2
Sid
Ученый
 
Аватар для Sid
 
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
Sid Скоро придёт к известностиSid Скоро придёт к известности
По умолчанию

Хех, у самого такая задача стояла Но так как я пишу на Qt там было проще благодаря метасистеме классу QMetaEnum
На чистых плюсах не знаю даже. Если бы было просто, то наверняка названия опкодов брали бы из енумов, а не регистрировали строковое значение.
__________________
SpellWork Qt4
Sid вне форума   Ответить с цитированием
Старый 20.06.2012, 14:46   #3
Forgotten
Новичок
 
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
Forgotten На верном пути
По умолчанию

https://github.com/mangos/mangos/blo.../util.cpp#L193
Forgotten вне форума   Ответить с цитированием
Старый 20.06.2012, 16:29   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Есть именно енум, а не массив строк.
В идеале надо из этого енума сформировать что-то типа ассоциативного массива, в котором ключами будут значения енума, а значениями - названия ключей енума, чтобы можно было в лог ошибок писать aParams[8] (формат из другого языка) для вставки названия параметра.
virusav вне форума   Ответить с цитированием
Старый 20.06.2012, 18:42   #5
Forgotten
Новичок
 
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
Forgotten На верном пути
По умолчанию

хе-хе, я ведь говорю о практически возможном способе, а не об идеале, которого для чистого С++ нет
вам в любом случае нужно будет сформировать этот массив, ручками, программой или препроцессором.
Forgotten вне форума   Ответить с цитированием
Старый 12.07.2012, 22:34   #6
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Задача в исходном виде нерешаемая, имена параметров енума известны только в компайл-тайм, в ран-тайм остаются только числовые значения.
Для решения необходимо позаботиться о сохранении имен параметров в ран-тайме, например при помощи std:map<int, std:string>, ну или любой другой вариант.
Для чистого enuma - задача нерешаемая.
Йоха вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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


Текущее время: 16:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot