crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Способ конвертации имени элемента перечисления в строку
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".
Не знаете?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 16.1.2009, 15:03
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(kuler @ 16.1.2009, 14:59) *
есть enum EnThreadState {tsNone, tsGetEquipmentStringList}
хотелось бы чтобы в коде можно было получить строку (скажем char*) по элементу, то есть char* str = func(tsNone) и теперь str = "tsNone".
Не знаете?

На ум приходит два метода:
1) switch case :)
2) использование контейнера map
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 16.1.2009, 15:09
Сообщение #3


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

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

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




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


AD,
это все понятно но надо без лишнего геморроя
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 15:09
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


kuler, а почему тема здесь, ты хочешь средствами стандартной библиотеки С?

И слово команда в заголовке сбивает с толку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 16.1.2009, 15:20
Сообщение #5


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

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

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




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


Цитата(Litkevich Yuriy @ 16.1.2009, 15:09) *
а почему тема здесь, ты хочешь средствами стандартной библиотеки С?

это вроде не может быть функция библиотеки, это функция компилятора
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.1.2009, 15:24
Сообщение #6


Мастер
******

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

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




Репутация:   40  


Не совсем, это скороей языковые обороты, в моем варианте препроцессорные:
enum EnThreadState {tsNone, tsGetEquipmentStringList};
#define THREADSTATE( sz) #sz

#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << THREADSTATE( EnThreadState::tsNone) << std::endl;
    std::cout << THREADSTATE( EnThreadState::tsGetEquipmentStringList) << std::endl;

    std::cout << THREADSTATE( tsNone) << std::endl;
    std::cout << THREADSTATE( tsGetEquipmentStringList) << std::endl;

    return 0;
}
:)

Сообщение отредактировал ViGOur - 16.1.2009, 15:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 16.1.2009, 15:31
Сообщение #7


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

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

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




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


ViGOur,
а в чем смысл? #sz? _tmain?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.1.2009, 16:01
Сообщение #8


Мастер
******

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

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




Репутация:   40  


Ты компилировал пример?
В нем возвращается имя твоего параметра в строковом представлении...
#sz - строковое представление твоего параметра
_tmain - сгенерировала студия, переименуешь в main ничего не случится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 16:15
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


ViGOur, я забыл, а что означает одна решетка в макросах.
Две я помню - это сцепление строк.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.1.2009, 16:33
Сообщение #10


Мастер
******

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

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




Репутация:   40  


Цитата(Litkevich Yuriy @ 16.1.2009, 16:15) *
Две я помню - это сцепление строк.
Одним словом - конкатенация.

Не помню как это называется, но помню, что так нужно делать, если нужно получить не значение переменной, а её имя, когда не знаешь его, а очень нужно. :)

Разумеется это относится к макросам.

Думается мне, что место этой теме в технике программирования, как считаешь kuler?
Просто компиляторами тут пока даже и не пахнет.

Сообщение отредактировал ViGOur - 16.1.2009, 16:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.4.2021, 19:35