C ++ cout и enum представления - PullRequest
2 голосов
/ 29 мая 2011

У меня есть перечисление, для которого я делаю cout, например: cout << myenum.

Когда я отлаживаю, я вижу значение как целочисленное значение, но когда cout выплевывает его, оно отображается как текстовое представление.

Есть идеи, что cout делает за кулисами? Мне нужен тот же тип функциональности, и есть примеры того, как преобразовать перечисляемые значения в строковые, но кажется, что нам нужно знать, что эти значения опережают время. В моем случае нет. Мне нужно взять любое старое и получить его текстовое представление. В C # это кусок пирога; C ++ .. совсем не просто.

Я могу взять целочисленное значение, если мне нужно, и преобразовать его соответствующим образом, но строка даст мне именно то, что мне нужно.

UPDATE:

Большое спасибо всем, кто внес вклад в этот вопрос. В конечном итоге я нашел свой ответ в каком-то скрытом коде. Существовал метод для преобразования значения enum в строку, представляющую фактический ход, например, «exd5», который имеет значение ya. В этом методе, хотя они делали довольно дикие вещи, которые я сейчас избегаю. Моей главной целью было добраться до строкового представления.

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Enum.hpp:

enum Enum {
  FOO,
  BAR,
  BAZ,
  NUM_ENUMS
};

extern const char* enum_strings[];

Enum.cpp:

const char* enum_strings[] = {
  "FOO",
  "BAR",
  "BAZ",
  "NUM_ENUMS",
  0 };

Затем, когда я хочу вывести символическое представление перечисления, я использую std::cout << enum_strings[x].

Таким образом, вам нужно знать строковые значения, но только в одном месте - не везде, где вы используете это.

0 голосов
/ 29 мая 2011

Эта функциональность взята из библиотеки IOStreams. std::cout является std::ostream.

std::stringstream тоже std::ostream.

int x = 5;
std::stringstream ss;
ss << x;

// ss.str() is a string containing the text "5"
...