Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58

Диапазоны значений перечислителей

23.03.2013, 17:36. Показов 2031. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане!
Для чего нужны диапазоны значений перечислителей, если самим перечислителям соответствуют только те значения, которыми они инициализированы при объявлении? Поначалу, когда я читал, упустил этот момент и подумал, что на перечислитель будет указывать любое значение его диапазона, тогда полезность его очевидна (особенно при выборе диапазонов с ипользованием switch). Но при реальных обстоятельствах - зачем нужны диапазоны?

И сразу ещё один вопросик - как получить имя перечислителя в виде строки?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2013, 17:36
Ответы с готовыми решениями:

Переделать код так, чтобы использовались диапазоны значений с помощью указателей
Мне уже стыдно сюда писать ей богу :wall: . Но есть задача переделать Код№1 так чтобы использовались диапазоны значений с помощью...

Объяснить нюансы использования литералов-перечислителей
Почему в Си не допускается, чтобы один и тот же литерал-перечислитель входил в два различных перечислимых типа? Могут ли совпадать имена...

Передача в многомерный массив диапазоны значений - работаю в AnyLogic
Всем привет. Добавлено через 15 минут Всем привет. Застрял на кодировке. Есть массив Array . Три столбца хранят значения min,...

2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.03.2013, 11:01
Цитата Сообщение от Gleb4uk Посмотреть сообщение
Для чего нужны диапазоны значений перечислителей,
Есть целочисленный тип, на котором базируется тип перечисления. Он, по сути, и задает диапазон.
Цитата Сообщение от Gleb4uk Посмотреть сообщение
как получить имя перечислителя в виде строки
В C++ никак, если сами об этом не позаботитесь. В .Net языках (C++/CLI например) можно использовать рефлексию.
P.S. Вообще, для Ваших вопросов не помешали бы примеры.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.03.2013, 12:07
Лучший ответ Сообщение было отмечено Gleb4uk как решение

Решение

Можно намутить свой макрос для маппинга между значением-строкой.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <boost/bimap.hpp>
 
template<typename E>
class enums_helper
{
   typedef boost::bimaps::bimap<std::string, boost::bimaps::set_of<E>> map_t;
   typedef typename map_t::value_type value_type;
public:
   enums_helper& operator () (const E& e, const std::string& name)
   {
      if (!members.insert(value_type(name, e)).second)
      {
         throw std::logic_error("Not unique");
      }
      return *this;
   }
   const E& operator [](const std::string& name) const
   {
      return get(name);
   }
   const std::string& operator [](const E& e) const
   {
      return get(e);
   }
private:
   const E& get (const std::string& name) const
   {
      auto pos = members.left.find(name);
      if (pos == members.left.end())
      {
         throw std::logic_error("Not found by name");
      }
      return pos->second;
   }
   const std::string& get(const E& e) const
   {
      auto pos = members.right.find(e);
      if (pos == members.right.end())
      {
         throw std::logic_error("Not found by value");
      }
      return pos->second;
   }
   map_t members;
};
 
#define MakeName2(x, y) x ## y
 
#define ENUM_NAMES_DECL(Enum) \
const Enum& get_by_name(const std::string&); \
const std::string& get_by_value(const Enum&);
 
#define ENUM_NAMES_BEGIN(Enum) \
static const enums_helper<Enum> MakeName2(names, Enum) = enums_helper<Enum>()
 
#define ENUM_NAMES_END(Enum) ; \
const Enum& get_by_name(const std::string& name) { return MakeName2(names, Enum)[name]; } \
const std::string& get_by_value(const Enum& e) { return MakeName2(names, Enum)[e]; }
 
enum E
{
   first,
   second
};
 
ENUM_NAMES_DECL(E)
ENUM_NAMES_BEGIN(E)
(first, "first")
(second, "second")
ENUM_NAMES_END(E)
 
int main()
{
   std::cout << get_by_name("first") << std::endl;
   std::cout << get_by_value(second) << std::endl;
}
http://liveworkspace.org/code/3kiySP$0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2013, 12:07
Помогаю со студенческими работами здесь

Есть ли в шарпе возможность в switch указывать диапазоны значений?
В паскале например можно было через .. задавать диапазоны. Очень удобно было 'A'..'Z': что-то делается1 'a'..'z': что-то делается2 ...

Диапазоны int64
Подскажите как можно получить диапазоны например 4 диапазона из 100 (int64) 0 -24 25-49 50-74 75-100

Диапазоны rgb
Мне нужно создавать рандомно цвета, не темные. Покажите пример. Добавлено через 12 минут И не яркие которые режут глаза. Задача...

Условия и диапазоны
Здравствуйте , плохо разбираюсь в excel, у меня есть столбцы с различными значениями , мне нужно как то задать условие , чтобы выделило...

Именованные диапазоны
Добрый день, подскажите пожалуйста, как автоматически вывести имя диапазона в ячейку или адрес диапазона, что бы использовать в формуле...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru