crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Способ конвертации имени элемента перечисления в строку
kuler
  опции профиля:
сообщение 16.1.2009, 14:59
Сообщение #1


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


есть enum EnThreadState {tsNone, tsGetEquipmentStringList}
хотелось бы чтобы в коде можно было получить строку (скажем char*) по элементу, то есть char* str = func(tsNone) и теперь str = "tsNone".
Не знаете?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Andrew Selivanov
  опции профиля:
сообщение 16.1.2009, 16:55
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Можно еще вот так (подсмотрено на http://stackoverflow.com/questions/201593/...-enum-to-string)

содержимое файлика colours.def
X(Red, "red")
X(Green, "green")


ну и сам код)
enum Colours {
#define X(a, b) a,
#include "colours.def"
#undef X
    ColoursCount
};

char const* const colours_str[] = {
#define X(a, b) #b,
#include "colours.def"
#undef X
    0
};

int main()
{
    std::cout << colours_str[Green] << "\n";
    return 0;
}


Ну и про макросы обобщим:
# - в строку
#@ - в char
## - слепить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 22.1.2009, 9:59
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Andrew Selivanov @ 16.1.2009, 16:55) *
...
char const* const colours_str[] = {
#define X(a, b) #b,
#include "colours.def"
#undef X
    0
};
....

при использовании #define X(a, b ) #b строковые значения выводятся в ковычках, т.е. как записаны в colours.def
Цитата
color = "Red"
color = "Gray"


при использовании #define X(a, b ) b
Цитата
color = Red
color = Gray


классная штука.

Сообщение отредактировал kwisp - 22.1.2009, 9:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- kuler   Способ конвертации имени элемента перечисления в строку   16.1.2009, 14:59
- - AD   Цитата(kuler @ 16.1.2009, 14:59) есть enu...   16.1.2009, 15:03
- - kuler   AD, это все понятно но надо без лишнего геморроя   16.1.2009, 15:09
- - Litkevich Yuriy   kuler, а почему тема здесь, ты хочешь средствами с...   16.1.2009, 15:09
- - kuler   Цитата(Litkevich Yuriy @ 16.1.2009, 15:09...   16.1.2009, 15:20
- - ViGOur   Не совсем, это скороей языковые обороты, в моем ва...   16.1.2009, 15:24
- - kuler   ViGOur, а в чем смысл? #sz? _tmain?   16.1.2009, 15:31
- - ViGOur   Ты компилировал пример? В нем возвращается имя тво...   16.1.2009, 16:01
- - Litkevich Yuriy   ViGOur, я забыл, а что означает одна решетка в мак...   16.1.2009, 16:15
- - ViGOur   Цитата(Litkevich Yuriy @ 16.1.2009, 16:15...   16.1.2009, 16:33
- - kuler   Цитата(ViGOur @ 16.1.2009, 16:33) Просто ...   16.1.2009, 16:50
- - Andrew Selivanov   Можно еще вот так (подсмотрено на http://stackover...   16.1.2009, 16:55
|- - kwisp   Цитата(Andrew Selivanov @ 16.1.2009, 16:5...   22.1.2009, 9:59
- - ViGOur   Цитата(kuler @ 16.1.2009, 16:50) а что же...   16.1.2009, 17:02
- - Litkevich Yuriy   ViGOur, я думаю это все таки к компиляторной теме ...   16.1.2009, 17:28
- - kuler   ViGOur, все просек, # рулит.   16.1.2009, 17:29
- - ViGOur   Цитата(Litkevich Yuriy @ 16.1.2009, 17:27...   16.1.2009, 17:29
- - kuler   стоп! а так не работает: EnThreadState state; ...   16.1.2009, 17:55
- - void*   kuler, все правильно, так и должно работать   16.1.2009, 18:18
- - kuler   Цитата(void* @ 16.1.2009, 18:18) все прав...   16.1.2009, 18:21
- - ViGOur   Цитата(kuler @ 16.1.2009, 17:55) str = ...   16.1.2009, 18:21
- - Litkevich Yuriy   kuler, может ты цель раскажешь, может быть решение...   16.1.2009, 18:31
- - kuler   Цитата(ViGOur @ 16.1.2009, 18:21) С этого...   16.1.2009, 18:40
- - kuler   Цитата(Litkevich Yuriy @ 16.1.2009, 18:31...   16.1.2009, 19:14
- - Litkevich Yuriy   kuler, пользуйся тэгом code ()   16.1.2009, 19:26
- - Tonal   можно ещё воспользоваться магией конкретного компи...   19.1.2009, 13:06
- - Andrew Selivanov   Цитата(Tonal @ 19.1.2009, 13:06) можно ещ...   19.1.2009, 17:04


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 4:14