crossplatform.ru

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


  Ответ в Способ конвертации имени элемента перечисления в строку
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 22.1.2009, 9:59
 
Цитата(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


классная штука.
Andrew Selivanov Дата 19.1.2009, 17:04
 
Цитата(Tonal @ 19.1.2009, 13:06) *
можно ещё воспользоваться магией конкретного компилятора. :)
Вот код работающий на mingw 3.4.5:
...<>...

Как то ты это... непортабельно загнул)
Tonal Дата 19.1.2009, 13:06
  можно ещё воспользоваться магией конкретного компилятора. :)
Вот код работающий на mingw 3.4.5:
#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

template <class En, En val>
string getName() {
  // __PRETTY_FUNCTION__ >> std::string getName() [with En = A, En val =  a]
  const char* c = strstr(__PRETTY_FUNCTION__, ", En val =") + 10;
  while (c && *c == ' ')
    ++c;
  return c ? string(c, c + strlen(c) - 1) : string();
}

enum A {a, b, c};

int main() {
  cout<<getName<A, a>()<<endl;
}

Под другой компилятор придётся найти соответствующий макрос вместо __PRETTY_FUNCTION__ (__FUNCTION__ есть почти везде) и изменить код разбора строки. :)

К сожалению обратную функцию - по имени вывести значение сделать изрядно сложнее. :(
Litkevich Yuriy Дата 16.1.2009, 19:26
  kuler, пользуйся тэгом code ()
kuler Дата 16.1.2009, 19:14
 
Цитата(Litkevich Yuriy @ 16.1.2009, 18:31) *
может ты цель раскажешь, может быть решение будет и попроще

ну это вот и есть тот код который должен заработать

EnThreadState state;

state = tsNone;
.....
func()
{
switch (state)
{
.........
}
debug(THREADSTATE(state));
}
kuler Дата 16.1.2009, 18:40
 
Цитата(ViGOur @ 16.1.2009, 18:21) *
С этого и нужно было начианать!

да, не до конца довел мыслю
Litkevich Yuriy Дата 16.1.2009, 18:31
  kuler, может ты цель раскажешь, может быть решение будет и попроще.
ViGOur Дата 16.1.2009, 18:21
 
Цитата(kuler @ 16.1.2009, 17:55) *
str = "state" а хотелось бы "tsNone"
С этого и нужно было начианать! :)
kuler Дата 16.1.2009, 18:21
 
Цитата(void* @ 16.1.2009, 18:18) *
все правильно, так и должно работать

да но тогда нужен другой способ
void* Дата 16.1.2009, 18:18
  kuler, все правильно, так и должно работать
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 18:09