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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать класс [B]TreeChar[/B], для работы с элементами двоичного дерева http://www.cyberforum.ru/cpp-beginners/thread816415.html
Создать класс TreeChar, для работы с элементами двоичного дерева ASCII-символов. В качестве членов-данных рекомендуется брать элементы самоссылочной структуры следующего вида: struct Node { char data; Node *LeftPtr, *RightPtr; }; где LeftPtr и RightPtr адрес левого и правого узла, соответственно. Определить в этом классе функции-члены класса, обеспечивающие: заполнение дерева,...
C++ fastcall & inline Здравствуйте, я бы хотел спросить когда нужно использовать эти комманды. Когда использовать inline я примерно знаю: когда функция маленькая и используется очень часто. То, что fastcall перемещает аргументы не в стек, а сразу в регистры знаю. fastcall нужно использовать когда много аргументов? И есть ли смысл вообще так стремится к оптимизации, если компилятор сам знает что нужно оптимизировать? http://www.cyberforum.ru/cpp-beginners/thread816405.html
C++ MPLAB
Ребята кто нибудь работает в программе MPLAB на базе микроконтроллера PIC 16F84????
C++ вывод матрицы. шаблонов
помогите пожалуйста разобратся с программой. на данном этапе нужно вывести матрицу на экран при помощи шаблонов. ошибок не выдает, но не компилирует и пишет что что-то не так с выводом матрицы .... "operator <<" помогите разобатся, что там не так.... #include<conio.h> #include<stdio.h> #include<iostream> #include<iomanip> #include<math.h>
C++ Вводятся два числа. Вычислить их разницу и вывести результат в виде, например 20-10 = 10 http://www.cyberforum.ru/cpp-beginners/thread816401.html
Вводятся два числа. Вычислить их разницу и вывести результат в виде, например 20-10 = 10
C++ Доделать программу для генерации и проверки серийного номера жесткого диска Программа должна содержать: • функция char* GetComputerData(), которая возвращает серийный номер жесткого диска • функцію char* CalculateSerialNumber(char* comp_data, char* user_name), которая высчитывает серийный номер на основе уникального значения и имени пользователя. • Алгоритм формирования серийного номера должен базироваться на операции XOR (длинна серийного номера должна быть 8... подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2013, 12:07     Диапазоны значений перечислителей
Можно намутить свой макрос для маппинга между значением-строкой.
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
 
Текущее время: 00:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru