Есть ли способ во время выполнения сопоставить значение перечисления с именем? (Я строю с GCC.)
Я знаю, что GDB может это сделать, и я готов использовать что-то непереносимое и мешающее с отладочными данными.
Изменить: Я ищу решение, которое не требует изменения исходного объявления перечисления или ручного копирования всех значений в функции сопоставления. Я уже знаю, как это сделать.
Эффективно; Мне нужна функция, которая делает то же, что делает GDB, когда форматирует значения enum во время выполнения.
Ответ 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-скрипта?