Finns det något bättre sätt att kunna konvertera enums till string i C++?

Permalänk

Finns det något bättre sätt att kunna konvertera enums till string i C++?

Jag har alltid haft behov utav att kunna konvertera enums till strängar i både C och C++. I C så har jag fått göra ett sådant koncept. Notera att koden nedan är C++ kod, men det enda som skiljer är att jag har använt std::vector och std::string istället för vanlig hedlig C-string så som char-array och länkad lista. Men resultatet skulle ändå bli det samma.

Hur som helst, detta är mitt förslag på hur man kan konvertera enums till sträng. Då är frågan: Finns det något bättre sätt i C++?

typedef enum { USB_PROTOCOL_MODBUS, USB_PROTOCOL_CDC, USB_PROTOCOL_MAX_INDEX }USB_PROTOCOL; std::string Tools_Hardware_USB_getProtocolString(const USB_PROTOCOL protocol) { switch (protocol) { case USB_PROTOCOL_MODBUS: return "Modbus"; case USB_PROTOCOL_CDC: return "CDC"; default: return "NO PROTOCOL FOUND"; } } USB_PROTOCOL Tools_Hardware_USB_searchProtocol(const std::vector<std::string> &protocols, const std::string &protocol) { for (size_t i = 0; i < protocols.size(); i++) { if (protocols.at(i).compare(protocol) == 0) { switch (i) { case USB_PROTOCOL_MODBUS: return USB_PROTOCOL_MODBUS; case USB_PROTOCOL_CDC: return USB_PROTOCOL_CDC; default: return USB_PROTOCOL_MODBUS; } } } } std::vector<std::string> Tools_Hardware_USB_getAllProtocolStrings() { std::vector<std::string> protocols; for (int i = 0; i < USB_PROTOCOL_MAX_INDEX; i++) { std::string protocol = Tools_Hardware_USB_getProtocolString((USB_PROTOCOL)i); protocols.push_back(protocol); } return protocols; }