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

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

Войти
Регистрация
Восстановить пароль
 
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
#1

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

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

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

И сразу ещё один вопросик - как получить имя перечислителя в виде строки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Диапазоны значений перечислителей (C++):

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

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

Как программно определить диапазоны базовых типов? - C++
То есть, скажем, нужно определить максимальное и минимальное значение типа long double. Как это сделать программно? В стандартной...

Определить наибольшее из всех отрицательных значений, наибольшее из всех значений, количество нулевых значений - C++
Доброго времени суток. Помоги пожалуйста,никак не получается. Использование функций в языке СИ, получающих и возвpащающих pазличное...

Вычислить и распечатать таблицу значений заданных функций для указанных значений - C++
для всех х, меняющихся с шагом hx=0.5 и всех y, меняющихся с шагом hy=0,25 вычислить и распечатать таблицу значений функций u и y . ...

Вычисление таблицы значений заданной функции для N значений X в заданном интервале - C++
составить алгоритм и программу вычесления таблицы значений заданной функции для N значений X, меняющихся от Xнач с заданным шагом HX, и M...

2
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.03.2013, 11:01 #2
Цитата Сообщение от Gleb4uk Посмотреть сообщение
Для чего нужны диапазоны значений перечислителей,
Есть целочисленный тип, на котором базируется тип перечисления. Он, по сути, и задает диапазон.
Цитата Сообщение от Gleb4uk Посмотреть сообщение
как получить имя перечислителя в виде строки
В C++ никак, если сами об этом не позаботитесь. В .Net языках (C++/CLI например) можно использовать рефлексию.
P.S. Вообще, для Ваших вопросов не помешали бы примеры.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
25.03.2013, 12:07 #3
Можно намутить свой макрос для маппинга между значением-строкой.
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 12:07
Привет! Вот еще темы с ответами:

Вывести таблицу значений функции y=f(x) для всех значений x в пределах - C++
Вывести таблицу значений функции y=f(x) для всех значений x в пределах от a до b с шагом h. Значение действительного параметра k вводится с...

Напечатать таблицу значений функции для всех значений аргумента из диапазона [1..10] c шагом 0.1 - C++
Написать функцию, вычисляющую значение математической функции Y(x)=cos(x)+1 для всех значений аргумента из диапазона c шагом 0.1

Вычислить и напечатать таблицу значений V для десяти различных значений радиусов R1, R2, ..., R10 трубы - C++
Условие: Объемные расходы воды в секунду определяются по формуле: ...

Вычислить значение заданной функци на данном интервале с заданным шагом. Осуществить вывод значений аргумента и результатов вычислений значений функ - C++
Вычислить значение заданной функции y=f(x) на данном интервале с заданным шагом. Осуществить вывод значений аргумента и результатов...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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