Wie kann ich eine lexikalische Besetzung erweitern, um Aufzählungstypen zu unterstützen?

Ich habe die folgende Funktion, die eine Zeichenfolge in einen numerischen Datentyp konvertiert:

template <typename T>
bool ConvertString(const std::string& theString, T& theResult)
{
    std::istringstream iss(theString);
    return !(iss >> theResult).fail();
}

Dies funktioniert jedoch nicht für Aufzählungstypen. Daher habe ich Folgendes getan:

template <typename T>
bool ConvertStringToEnum(const std::string& theString, T& theResult)
{
    std::istringstream iss(theString);
    unsigned int temp;
    const bool isValid = !(iss >> temp).fail();
    theResult = static_cast<T>(temp);
    return isValid;
}

(Ich gehe davon aus, dass theString einen gültigen Wert für den Aufzählungstyp hat. Ich verwende diesen hauptsächlich für die einfache Serialisierung.)

Gibt es eine Möglichkeit, eine einzelne Funktion zu erstellen, die beide kombiniert?

Ich habe ein bisschen mit den Vorlagenargumenten gespielt, mir aber nichts einfallen lassen. Es wäre einfach schön, wenn Sie nicht eine Funktion für Aufzählungstypen und eine andere für alles andere aufrufen müssten.

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage