Jak mogę rozszerzyć rzutowanie leksykalne do obsługi wyliczonych typów?
Mam następującą funkcję, która konwertuje ciąg znaków na liczbowy typ danych:
template <typename T>
bool ConvertString(const std::string& theString, T& theResult)
{
std::istringstream iss(theString);
return !(iss >> theResult).fail();
}
Nie działa to jednak dla wyliczonych typów, więc zrobiłem coś takiego:
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;
}
(Zakładam, że ciąg ma prawidłową wartość dla wyliczonego typu; używam tego głównie do prostej serializacji)
Czy istnieje sposób na stworzenie jednej funkcji, która łączy oba te elementy?
Grałem trochę z argumentami szablonu, ale nic nie wymyśliłem; byłoby miło, gdyby nie trzeba było wywoływać jednej funkcji dla wyliczonych typów, a innej dla wszystkiego innego.
Dziękuję Ci