Parsen von strings in double mit error handling
-
Hallo,
ich habe folgende Funktion:
std::vector< double > ParseDoubleLine( const str_type & content ) { const auto substr = tokenize( content ); std::vector< double > test_vec; test_vec.reserve( substr.size() ); for( const auto & i : substr ) { test_vec.push_back( std::stod( i ) ); } return test_vec; }Jetzt möchte ich ein sauberes error handling.
Die Funktion stod wirft laut Spezifikation invalid_argument und out_of_range.
Wenn ich die Fehlerbehandlung innerhalb der Funktion habe, dann brauche ich etwas zur Fehleranzeige.
Ein weiteres Argument sieht doof aus. Auch möchte ich nicht den return wert ändern weil ich dann so etwas nicht kann:void andereFnc() { // sourcecode ... const auto test_vec = ParseDoubleLine( content ); }Um einen kurzen try/catch block zu haben ist sowas denkbar:
std::vector< double > test_vec; try { test_vec = ParseDoubleLine( content ); } catch( std::invalid_argument & e ) { // ... } catch( std::out_of_range & e ) { // ... } }Damit verliere ich aber das schöne const auto.
Ich möchte auch nicht den try catch Block ins Unendliche ziehen, weil der Quellcode dann wieder unübersichtlicher wird.Wie löst ihr solche Dinge? Oder mache ich generell was falsch?
-
lass die exception von derjenigen person behandeln, die für den
contentzuständig ist und verzichte auf dentry/catchblock. wenn du vor ort "nur" einwhatzu debugging-zwecken ausgeben willst, dann mach dentry-block einfach größer und wirf weiter.void foo (const string& content) try { const auto value = stod(content); } catch (const std::logic_error& ex) { cerr << "error: " << ex.what() << '\n'; throw; }