Wie konvertiert man std :: string_view in double?

8

Ich schreibe einen C ++ Parser für eine benutzerdefinierte Optionsdatei für eine Anwendung. Ich habe eine Schleife, die Zeilen in Form von option=value aus einer Textdatei liest, wobei value in double konvertiert werden muss. In Pseudocode tut es folgendes:

%Vor%

Um die String-Aufteilung und das Umleiten zu Funktionen zu behandeln, verwende ich std::string_view , weil es übermäßiges Kopieren vermeidet und eindeutig die Absicht angibt, Segmente eines bereits vorhandenen std::string anzuzeigen. Ich habe alles so gemacht, dass std::string_view value_str auf den genauen Teil von useful_statement zeigt, der den Wert enthält, den ich extrahieren möchte, aber ich kann nicht herausfinden, wie man double von std::string_view liest. .

Ich weiß von std::stod was mit std::string_view nicht funktioniert. Es erlaubt mir zu schreiben

%Vor%

Das ist jedoch hässlich, weil es in eine Zeichenfolge konvertiert wird, die eigentlich nicht benötigt wird, und obwohl es in meinem Fall vermutlich keinen merklichen Unterschied machen wird, könnte es zu langsam sein, wenn man eine große Anzahl von Zahlen lesen müsste aus einer Textdatei.

Andererseits funktioniert atof nicht, weil ich keinen Null-Terminator garantieren kann. Ich könnte es hacken, indem ich useful_statement zu %code% hinzufüge, wenn ich es konstruiere, aber das macht den Code für einen Leser verwirrend und macht es zu leicht zu brechen, wenn der Code verändert / refaktoriert wird.

Was wäre also eine saubere, intuitive und einigermaßen effiziente Methode?

    
patatahooligan 11.08.2017, 14:30
quelle

1 Antwort

10

Da Sie Ihre Frage mit C ++ 1z markiert haben, bedeutet das (theoretisch), dass Sie Zugriff auf % co_de haben % Es kann Ihre Umwandlung von Zeichenkette zu Zahl verarbeiten, ohne etwas mehr als ein Paar from_chars s zu benötigen:

%Vor%

Dies erfordert natürlich, dass Ihre Standardbibliothek eine Implementierung von const char* bereitstellt. Libstdc ++ funktioniert nicht , oder does libc ++ . Oder Visual Studio, für diese Angelegenheit.

    
Nicol Bolas 11.08.2017, 14:48
quelle

Tags und Links