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;
}