LINUX.ORG.RU

enum class En_Test
{
	ONE
	, TWO
	, THREE
};

Сразу вдоль.

Нет. C++ такое не умеет. Или глобальные методы или городить свой класс, ака:

class MyEnum {
public:
    enum Type { One, Two, Three };

    std::string toString() const;

    // перегрузка операторов и прочее по вкусу.
};

RazrFalcon ★★★★★
()

Лучше словарик, а не свитч.

panter_dsd ★★★★
()
Ответ на: комментарий от penetrator3000

Заведи себе std::map<enum, std::string>, это самый удобный способ из известных лично мне

XMs ★★★★★
()
 	switch (enTest)
 	{
 		case En_Test::ONE:
 			return "ONE";
 		case En_Test::TWO:
 			return "TWO";
 		case En_Test::THREE:
 			return "THREE";
-		default:
-			return "Unhandled value";
 	}
+	assert(false && "Unhandled value");
+	return "Unhandled value";

Так будет сложнее забыть обновить функцию при изменения перечисления.

xaizek ★★★★★
()
Ответ на: комментарий от RazrFalcon

Ваш компилятор не умеет проверять switch?

Некоторые разработчики просто не умеют читать предупреждения (отсюда тоже и селективный -Werror).

KennyMinigun ★★★★★
()

Мое решение.

#define PAST_ALL()\
    SET(ONE),\
    SET(TWO),\
    SET(THRE)

enum my_enum { 
#define SET(X) MY_ENUM_ ## X
    PAST_ALL();
};

static const char* const table[] = {
#define SET(X) #X
    PAST_ALL();
};

puts(table[MY_ENUM_TWO]); // "TWO"
Хз юзаю для тегов в своем браузере, а вот как String -> Tag быстро сделать не знаю.

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 2)
Ответ на: комментарий от xaizek

assert(false && «Unhandled value»);

Тогда уж лучше так assert(!"Unhandled value");.

andreyu ★★★★★
()
Ответ на: комментарий от penetrator3000

В общем как я понял такой способ самый удобный. Cпасибо LOR.

Но далеко не самый быстрый.

andreyu ★★★★★
()
Ответ на: комментарий от penetrator3000

Если есть возможность используй для этой цели string_view:

Даже в вашем простом примере 311 строчек против 471 с string:

https://godbolt.org/g/MktoJG

fsb4000 ★★★★★
()
Ответ на: комментарий от KennyMinigun

Эти разработчики, зачастую, не осилили IDE, которая это всё парсит и подсвечивает. А они продолжают грызть кактус типа вима.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Эти разработчики, зачастую, не осилили IDE, которая это всё парсит и подсвечивает. А они продолжают грызть кактус типа вима.

Зачастую такие разработчики используют мышку и microsoft visual studio.

andreyu ★★★★★
()

QMetaEnum::valueToKeys() и Q_ENUM.

vzzo ★★★
()

Конечно же, никак. Это же кресты. Просто выкинь кресты, и всё. Они говно.

C# тот же, позволяет сделать все легко через рефлекшн.

lovesan ★★
()
Ответ на: комментарий от RazrFalcon

А вот и свидетели вима подтянулись.

Куда мне до мыше-программистов в ide, которая все умеет.

andreyu ★★★★★
()

IMHO, самое правильное решение такой задачи - внешний инструмент. Люди, которым нужна интроспекция для сериализации и подобных вещей - просто с головой не дружат (не нужна такая фукнциональность в языке, если ее можно реализовать внешним инструментом).

Вот решение от германского студента:

https://foonathan.net/meetingcpp2017.html

https://github.com/foonathan/cppast

Там даже примеры есть.

anonymous
()
Ответ на: комментарий от anonymous

Ты так говоришь как будто это что-то плохое

Именно так.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.