Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
#1

Узнать элемент enum по значению - C++

22.11.2014, 22:28. Просмотров 329. Ответов 10
Метки нет (Все метки)

Вот дан какой нибудь enum как определить ключ (имя переменной) по значению?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 22:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Узнать элемент enum по значению (C++):

Узнать количество перечислений в enum - C++
Добрый день! Как узнать количество перечислений в ABCDEF. enum ABCDEF{ P1, P2, P3 }; //Как-то так должно быть: ...

Инициализировать элемент вектора массивом enum - C++
Существуют enum class RoadState { Undefined, Good }; и std::vector<enum class Road::RoadState> states; нужно...

Дана матрица вещественных чисел. Найти максимальный элемент и наиболее удалённый от него (по значению) элемент матрицы. - C++
Дана матрица вещественных чисел. Найти максимальный элемент и наиболее удалённый от него (по значению) элемент матрицы. Поиск осуществлять...

Найти наименьший непарный элемент массива по значению - C++
Доброе время суток всем) Допустим есть массив с элементами {1,4,6,1,2,3,1,2,2,3}. Программа должна вывести наименьший непарный элемент по...

Удалить первый совпадающий по значению элемент из std::vector - C++
Пояснение: дано допустим так: int i = 5; Нужно удалить из вектора vector<int> первый попавшийся элемент со значением 5. Сам уж себя в...

Как сравнить элемент массива с другими элементами этого же по значению? - C++
Здравствуйте, мне нужно сравнить определенный элемент массива с другими элементами по значению. К примеру дан массив чисел. Мне нужно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
22.11.2014, 22:38 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
enum class Arrows
{
UP = 72,
DOWN = 75,
LEFT = 71,
RIGHT = 79
};
 
int main()
{
Arrows a = _getch();
switch(a)
{
case Arrows::UP:
cout << "verh";
break;
case Arrows::DOWN:
cout << "vniz";
break;
case Arrows::LEFT:
cout << "left";
break;
case Arrows::RIGHT:
cout << "right";
break;
}
return 0;
}
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
22.11.2014, 22:46  [ТС] #3
А вот теперь представьте, что таких элементов 100? =))
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
22.11.2014, 22:55 #4
Тогда, может быть, имеет смысл вместо перечисления массив сделать?
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
22.11.2014, 23:36  [ТС] #5
А по подробнее?
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3804 / 2062 / 527
Регистрация: 18.10.2014
Сообщений: 3,673
22.11.2014, 23:48 #6
Цитата Сообщение от Bmg113 Посмотреть сообщение
Вот дан какой нибудь enum как определить ключ (имя переменной) по значению?
Во-первых, задача бессмысленна с точки зрения языков С и С++. "Имена" элементов enum являются просто иденификаторами в исходном тексте программы. Они существуют только в исходном тексте програмы. В скомпилированном коде не существует никаких имен.

Во-первых, enum в общем случае не является однозначным отображением имен на значения. В enum сколько угодно именованных констант могут иметь одно и то же значение. К тому же физическое значние объекта типа enum не обязано совпадать ни с одной из явно объявленных именованных констант.

Если вам нужно вдруг зачем-то восстнавлоивать имена констант enum в том виде, в котром они были указаны в исходном тексте программы, то вам самостоятельно вручную придется организовать отображение значений на соответствующие строки. Но на самом деле сначало надо было бы выяснить, зачем вам такое могло понадобиться. Обычно это никому ни на фиг не нужно. А возникновение такой "необходимости" скорее свидетельствует о како-то заблуждении со стороны вопрошающего.
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
23.11.2014, 00:10 #7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А возникновение такой "необходимости" скорее свидетельствует о каком-то заблуждении со стороны вопрошающего.
Позвольте не полностью с вами согласиться, хотя все, что вы написали, совершенно верно. У меня пару раз возникали ситуации, когда объект (родной или унаследованный) вел себя чуток не так, как я хотел. А у объекта енумные флаги, какие-то устанавливаются по умолчанию, какие-то я меняю по ходу дела. И мне хотелось бы увидеть значение флага в данной точке программы. И получаю в qDebug, например, какое-то число, которое надо расщепить на биты, лезть в хедеры, разбирать их смысл...
Было бы значительно приятнее, если бы эти флаги мне выдавались в мнемонически понятном виде. Понимаю, что это из области фантастики (вы прекрасно написали - почему), но желание-то вполне объяснимо...
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
23.11.2014, 00:10  [ТС] #8
Приму к сведению =)

Если вкратце - я придумываю велосипед. Класс по работе с Excel через "QAxObject" оборачивая их в красивые функции.
И там есть входные данные enum. Так же я могу получить значение но оно будет int, а мне надо знать какой же все таки цвет ячейки или какое все же выравнивание.
И тут как я понимаю кроме switch мне никто не поможет.
Jewbacabra
Эксперт PHP
2415 / 2011 / 761
Регистрация: 24.04.2014
Сообщений: 5,894
23.11.2014, 00:11 #9
Bmg113, Технический приём для формирования согласованных данных
Bmg113
201 / 147 / 5
Регистрация: 14.03.2013
Сообщений: 784
23.11.2014, 00:13  [ТС] #10
Цитата Сообщение от Байт Посмотреть сообщение
Позвольте не полностью с вами согласиться, хотя все, что вы написали, совершенно верно. У меня пару раз возникали ситуации, когда объект (родной или унаследованный) вел себя чуток не так, как я хотел. А у объекта енумные флаги, какие-то устанавливаются по умолчанию, какие-то я меняю по ходу дела. И мне хотелось бы увидеть значение флага в данной точке программы. И получаю в qDebug, например, какое-то число, которое надо расщепить на биты, лезть в хедеры, разбирать их смысл...
Было бы значительно приятнее, если бы эти флаги мне выдавались в мнемонически понятном виде. Понимаю, что это из области фантастики (вы прекрасно написали - почему), но желание-то вполне объяснимо...
Вот! Вот та же самая причина! =)

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Технический приём для формирования согласованных данных
Пока не осилил. Попробую завтра. Спасибо.
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
23.11.2014, 00:16 #11
Цитата Сообщение от Bmg113 Посмотреть сообщение
Вот! Вот та же самая причина!
Это приятно, коллега
А уж если вы ковыряетесь в QAxObject, так там 2 черта сломят все 4 ноги!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 00:16
Привет! Вот еще темы с ответами:

Не вызывается нужный элемент массива по значению управляющей переменной в цикле for - C++
Вот часть кода : for(int i=0; i &lt; 5; i++){ cout &lt;&lt; &quot;Этот объект &quot; &lt;&lt; shapes-&gt;getName() &lt;&lt; &quot;\n&quot;; cout &lt;&lt; &quot;Площадь равна &quot; &lt;&lt; ...

Найти в массиве ближайший по значению элемент меньший заданного числа - C++
Добрый день, господа. Помогите пожалуйста с решением задачи. Дано некоторое число А. Найти в целочисленном массиве В из N элементов...

Каждый отрицательный элемент одномерного массива заменить противоположным по значению элементом - C++
Разработать рекурсивную функцию не возвращающую значение, которая каждый отрицательный элемент одномерного массива заменяет противоположным...

Очередь. Поставить перед каждым отрицательным элемент противоположный ему по значению - C++
Поставить перед каждым отрицательным элемент противоположный ему по значению.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.11.2014, 00:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru