Re[2]: Как бы сделать такие enum 'ы..
От: Stormblast http://www.myspace.com/stormblastblack
Дата: 12.02.08 15:04
Оценка:
может быть поможет быть
http://www.codeproject.com/KB/cpp/C___enums_to_strings.aspx
Re[3]: Как бы сделать такие enum 'ы..
От: wtom  
Дата: 12.02.08 15:22
Оценка:
Здравствуйте, shvonder, Вы писали:

S>Здравствуйте, wtom, Вы писали:


W>>Здравствуйте, Аноним, Вы писали:

W>>
W>>enum CommandKind{
W>>   APP_INIT = 0
W>>  ,APP_CLOSE = 1
W>>  .. = 2
W>>};
W>>const char* command_names[] =
W>>{
W>>"APP_INIT"
W>>, "APP_CLOSE"
W>>,
W>>};
W>>

W>>command_names[cmd] — это "APP_INIT"
S>Ну что вы в самом деле! Имеем:
S>
S>enum CommandKind{
S>   APP_INIT
S>  // 3 страницы текста
S>  TOTAL
S>};
S>const char* command_names[] =
S>{
S>"APP_INIT"
S>//3 страницы текста
S>};
S>


Ну... будет 6 страниц текста вместо 3-х. Зато не будет макросов и switch. Дело вкуса...
Не стоит переходить реку вброд, если известно только, что ее глубина (средняя) 4 фута.
Re[2]: Как бы сделать такие enum 'ы..
От: shvonder Россия  
Дата: 12.02.08 15:57
Оценка:
Здравствуйте, Stormblast
Т.е. номера раздаются в момент старта программы на статической переменной? Типа такого:
struct Item{
  Item(const Item&item){*this = item;}
  Item():val(-1),name("UNKNOWM"){}
  bool oprator== ...
  const char * name;
  int val;
};
extern const Item COMMAND1;// макрос DECLARE_ITEM(COMMAND1)
extern const Item COMMAND2;

// cpp
Item CreateItem(const char* name)
{
  static int count = 0;
  Item item;
  item.val = count++;
  item.name=name;
  return item;
}
const Item COMMAND1(CreateItem("COMMAND1"));//макрос IMPLEMENT_ITEM(COMMAND1)

Вроде действительно хороший вариант. По нажатиям клавишь так же как предложение Егора. Если прблем со стат. переменной не будет..
Re[3]: Как бы сделать такие enum 'ы..
От: Stormblast http://www.myspace.com/stormblastblack
Дата: 12.02.08 16:17
Оценка:
Здравствуйте, shvonder, Вы писали:

S>Т.е. номера раздаются в момент старта программы на статической переменной?

да
S>Если прблем со стат. переменной не будет..
не будет ...
Re[4]: Как бы сделать такие enum 'ы..
От: Erop Россия  
Дата: 12.02.08 20:05
Оценка: +1
Здравствуйте, wtom, Вы писали:

W>Ну... будет 6 страниц текста вместо 3-х. Зато не будет макросов и switch. Дело вкуса...

А синхронность правок в этих трёх страницах будет поддерживать кто?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Как бы сделать такие enum 'ы..
От: Programador  
Дата: 12.02.08 21:07
Оценка:
Здравствуйте, Аноним,

Для enum констант можно так
template <int N>
struct Ne
{  static char name[];
};

enum {enum1=__LINE__}; template<>  char Ne<enum1>::name[]="1";
enum {enum2=__LINE__}; template<>  char Ne<enum2>::name[]="2";

для enum переменных естественно не подойдет
Re[2]: Как бы сделать такие enum 'ы..
От: Erop Россия  
Дата: 13.02.08 12:23
Оценка:
Здравствуйте, Programador, Вы писали:

P>Для enum констант можно так

P>
P>template <int N>
P>struct Ne
P>{  static char name[];
P>};

P>enum {enum1=__LINE__}; template<>  char Ne<enum1>::name[]="1";
P>enum {enum2=__LINE__}; template<>  char Ne<enum2>::name[]="2";
P>

P>для enum переменных естественно не подойдет

А смысл так вычурно действовать?
Всё равно же где-то switch писать прийдётся?
Тогда можно и так:
enum { enum1 = __LINE__ }; const char enum1_name[] = "1";
enum { enum2 = __LINE__ }; const char enum2_name[] = "2";


Или, даже, так:
#define DECLARE_ID( idName ) enum { idName = __LINE__ }; const char idName##_Name[] = #idName;

DECLARE_ID( enum1 )
DECLARE_ID( enum2 )


ИМХО и проще и прямее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Как бы сделать такие enum 'ы..
От: Аноним  
Дата: 16.02.08 07:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но тут приходиться вручную создавать объекты Command, что неудобно.

А>Есть ли решение лучше ?

Так неудобно. Смотрите здесь
Автор: Кодт
Дата: 01.10.07
Re[2]: Как бы сделать такие enum 'ы..
От: Аноним  
Дата: 16.02.08 07:28
Оценка:
Здравствуйте, Аноним, Вы писали:

Если вы выберете похожий вариант, то придется вместо перечислений оформить это в виде структуры/класса.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.