Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сопоставление значений перечисления со строками в C ++

Автор вопроса: BCSОтветов: 3

Есть ли способ во время выполнения сопоставить значение перечисления с именем? (Я строю с GCC.)

Я знаю, что GDB может это сделать, и я готов использовать что-то непереносимое и мешающее с отладочными данными.


Изменить: Я ищу решение, которое не требует изменения исходного объявления перечисления или ручного копирования всех значений в функции сопоставления. Я уже знаю, как это сделать.

Эффективно; Мне нужна функция, которая делает то же, что делает GDB, когда форматирует значения enum во время выполнения.

  • Попробуйте начать здесь stackoverflow.com/questions/207976/ и здесь stackoverflow.com/questions/201593/ Igor Oks 11.12.2009
  • Интересно игнорировать стоп-слова и суффиксы, все, кроме одного слова в заголовке, совпадают с этой первой ссылкой, и она ВСЕ ЕЩЕ не отображалась в автоматическом поиске .... BCS 11.12.2009
  • Игорь Окс: упомянутые вопросы / ответы, похоже, вращаются либо вокруг альтернативных стилей замедления enum, либо вручную сгенерированных функций. У меня уже есть решение, которое работает через такое решение. BCS 11.12.2009
  • @BCS: Вы хотите, чтобы информация написала что-то подобное или что-то уже написанное (как подсказывает ваш комментарий к ответу Goz)? David Thornley 11.12.2009
  • Я ищу библиотеку, которой можно просто пользоваться. BCS 11.12.2009
  • Это немного проблематично, потому что компиляторы добавляют информацию в свои отладочные версии исполняемых файлов. Вы можете написать код для извлечения этой информации из исполняемого файла, но мне гораздо проще просто вставить код преобразования в мою программу. Не думаю, что это займет много времени. Thomas Matthews 11.12.2009

c++debuggingenums

Ответы

Ответ 1 · рейтинг 1 · Georg Fritzsche

Если вы не хотите тратить время на использование информации о символах GCC, gcc-xml предоставит вам информацию о Исходники C ++ в формате XML многократного использования, включая имена перечислений.

Упрощенный пример ... этот источник:

enum E {
  e1 = 1,
  e2 = 42
};

становится:

<GCC_XML>
  <!-- ... -->
  <Enumeration name="E">
    <EnumValue name="e1" init="1"/>
    <EnumValue name="e2" init="42"/>
  </Enumeration>
  <!-- ... -->
</GCC_XML>

Ответ 2 · рейтинг 3 · Thomas Matthews

Если у вас есть упорство, вы можете создать инструмент, который будет анализировать исходные файлы на предмет перечислений, генерировать функции перевода и добавлять их в исходный код. С большей энергией вы могли бы написать плагины для редакторов, таких как Eclipse и Emacs, которые сделают это за вас.

Может быть, это можно сделать с помощью Perl-скрипта?

Ответ 3 · Goz

Это может быть вам полезно:

Формат отладки "stabs"

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы