3 Stimmen

Verwendung der boost lexical_cast-Bibliothek nur zur Überprüfung der Eingabe

Ich benutze die boost lexical_cast Bibliothek für das Parsen von Textdaten in numerische Werte ziemlich oft. In einigen Situationen muss ich jedoch nur prüfen, ob die Werte numerisch sind; ich brauche oder verwende die Konvertierung eigentlich nicht.

Also, ich war über das Schreiben einer einfachen Funktion zu testen, ob eine Zeichenfolge ein Doppel ist denken:

template<typename T> 
bool is_double(const T& s)
{
  try 
  {
    boost::lexical_cast<double>(s); 
    return true;
  }
  catch (...) 
  {
    return false;
  }
}

Meine Frage ist, gibt es alle optimierenden Compiler, die die lexical_cast hier weglassen würde, da ich nie tatsächlich den Wert verwenden?

Gibt es eine bessere Technik, um die lexical_cast-Bibliothek zu verwenden, um die Eingabeprüfung durchzuführen?

0voto

piotr Punkte 5549

Verwenden Sie besser zuerst Regexe und dann lexical_cast, um in den richtigen Typ zu konvertieren.

0voto

paercebal Punkte 78198

Da der Typ T ein Templated Typename ist, glaube ich, dass Ihre Antwort die richtige ist, da sie in der Lage sein wird, alle Fälle zu behandeln, die bereits von boost::lexical_cast behandelt werden.

Vergessen Sie jedoch nicht, die Funktion für bekannte Typen zu spezialisieren, z. B. char * , wchar_t * , std::string , wstring , usw.

Sie könnten zum Beispiel den folgenden Code hinzufügen:

template<>
bool is_double<int>(const int & s)
{
   return true ;
}

template<>
bool is_double<double>(const double & s)
{
   return true ;
}

template<>
bool is_double<std::string>(const std::string & s)
{
   char * p ;
   strtod(s.c_str(), &p) ; // include <cstdlib> for strtod
   return (*p == 0) ;
}

Auf diese Weise können Sie die Verarbeitung für die Ihnen bekannten Typen "optimieren" und die übrigen Fälle an boost::lexical_cast delegieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X