Como posso estender uma conversão lexical para suportar tipos enumerados?

Eu tenho a seguinte função que irá converter uma string em um tipo de dados numérico:

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

Isso não funciona para tipos enumerados, no entanto, eu fiz algo assim:

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

(Eu estou fazendo a suposição de que theString tem um valor válido para o tipo enumerado; estou usando isso principalmente para serialização simples)

Existe uma maneira de criar uma única função que combine ambas?

Eu joguei um pouco com os argumentos do modelo, mas não encontrei nada; seria bom não ter que chamar uma função para tipos enumerados e outra para todo o resto.

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion