TGViewer
C++ geek C++ geek @cpp_geek · 3.53K subscribers
Post #307 2.15K
💡 Сегодня покажу вам способ, как удобно логировать enum-значения в C++, не превращая код в кашу из switch и if.

📌 Проблема: у вас есть enum, и вы хотите красиво выводить его в лог или std::cout, но стандартно C++ этого не умеет.

Например:


enum class Status {
Ok,
Error,
Timeout
};


Обычно вы пишете:


std::string to_string(Status s) {
switch(s) {
case Status::Ok: return "Ok";
case Status::Error: return "Error";
case Status::Timeout: return "Timeout";
}
return "Unknown";
}


Но есть способ проще и без switch — с помощью макроса и X-макросов:


#define STATUS_ENUM(XX) \
XX(Ok) \
XX(Error) \
XX(Timeout)

enum class Status {
#define GENERATE_ENUM(name) name,
STATUS_ENUM(GENERATE_ENUM)
#undef GENERATE_ENUM
};

inline const char* to_string(Status s) {
switch(s) {
#define GENERATE_CASE(name) case Status::name: return #name;
STATUS_ENUM(GENERATE_CASE)
#undef GENERATE_CASE
default: return "Unknown";
}
}


Теперь достаточно один раз задать список значений — и не нужно вручную синхронизировать enum и to_string().

✅ Такой подход легко масштабируется.
✅ Удобно для логирования, отладки и сериализации.

Пользуйтесь!

➡️ @cpp_geek
  • 👍 9
  • 🥴 7
More from @cpp_geek
  1. Sep 29, 2026Dependency Injection Dependency Injection (DI) — это паттерн проектирования, который позво…
  2. Sep 24, 2026🎥 Вебинар по C++: Паттерн многопоточного программирования «Producer-Consumer» Когда неско…
  3. Sep 24, 2026Execution policy для параллельных алгоритмов Execution policy в C++ — это новшество, введе…
  4. Sep 17, 2026В чем разница между git fetch и git pull? Разница между этими командами заключается в том,…
  5. Sep 15, 2026std::tie std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргумент…
  6. Sep 11, 2026move constructor Move-конструктор — это специальный конструктор, который позволяет эффекти…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →