könnte mir jemand über einige praktische Beispiele zur Verwendung von String-Streams in C++ erzählen, d. H. Eingabe und Ausgabe in einen String-Stream unter Verwendung von Stream-Insertion- und Stream-Extraction-Operatoren?C++: Welche Vorteile bieten String-Streams?
Antwort
können Sie String-Streams verwenden, um etwas zu konvertieren, die operator <<
in einen String implementiert:
#include <sstream>
template<typename T>
std::string toString(const T& t)
{
std::ostringstream stream;
stream << t;
return stream.str();
}
oder sogar
template <typename U, typename T>
U convert(const T& t)
{
std::stringstream stream;
stream << t;
U u;
stream >> u;
return u;
}
Denken Sie daran, dass diese Lösung nur für primitive Typen und überladene Versionen von 'operator <<' mit bestimmten Klassen funktioniert. – fogo
@fogo: Und da es relativ üblich ist, Streaming-Operatoren für Klassen zu definieren, ist das keine so große Sache. –
@Martin York In der Tat habe ich gerade einen richtigen Kommentar erwogen, wenn man bedenkt, dass * irgendwas * in der Antwort umgeschrieben wurde. – fogo
Neben Vorteile gibt es one point to carefully consider, wenn Sie gcc 4.3.1 verwenden. Ich habe die vorherigen Versionen von gcc nicht überprüft.
Dies war eine Einschränkung einer bestimmten Implementierung (gcc). Es folgt der Link durch den Bugzilla-Bug, der mit dem Problem verbunden ist. Sie werden auch bemerken, dass der Bug als gelöst markiert wurde.
Dann ist es großartig! Ich werde meinen Beitrag bearbeiten, um Informationen hinzuzufügen, welche diese Informationen nur für einige Versionen von gcc relevant sind. –
Sie können überall dort verwendet werden, wo ein normaler Stream verwendet werden kann.
In Situationen, in denen Sie aus einer Datei gelesen haben, könnten Sie möglicherweise aus einem Zeichenfolge-Stream lesen.
void compile(std::istream& str)
{
CPlusPlusLexer lexer(str);
CPlusPlusParser parser(lexer);
BackEnd backend(parser);
backend.compile();
}
int main()
{
std::fstream file("Plop.cpp");
compile(file);
std::stringstream test("#include <iostream>\n int main() { std::cout << \"H World\n\";}");
compile(test);
}
Ich benutze sie meist als Speicherpuffer, bei der Schaffung von Meldungen:
if(someVector.size() > MAX_SIZE)
{
ostringstream buffer;
buffer << "Vector should not have " << someVector.size() << " eleements";
throw std::runtime_error(buffer.str());
}
oder komplexe Strings zu konstruieren:
std::string MyObject::GenerateDumpPath()
{
using namespace std;
std::ostringstream dumpPath;
// add the file name
dumpPath << "\\myobject."
<< setw(3) << setfill('0') << uniqueFileId
<< "." << boost::lexical_cast<std::string>(state)
<< "_" << ymd.year
<< "." << setw(2) << setfill('0') << ymd.month.as_number()
<< "." << ymd.day.as_number()
<< "_" << time.hours()
<< "." << time.minutes()
<< "." << time.seconds()
<< ".xml";
return dumpPath.str();
}
Es ist nützlich, weil es die Erweiterbarkeit von std::stream
bringt s zur Verwendung von Zeichenpuffern (Ostreams-Erweiterbarkeit und Locales-Unterstützung, Pufferspeicherverwaltung ist verborgen und so weiter).
Ein anderes Beispiel war ich der Fehler in gsoap Bibliothek Berichterstattung gesehen haben, Dependency Injection mit:. soap_stream_fault einen ostream & Parameter nimmt in Fehlermeldungen melden
Wenn Sie möchten, passieren kann std :: cerr, std :: cout oder eine std :: ostringstream-Implementierung (ich verwende es mit einer std :: ostringstream-Implementierung).
- 1. Welche Vorteile bieten Schnittstellen und abstrakte Klassen?
- 2. Welche Forex Broker bieten API?
- 3. Welche Online-Broker bieten APIs an?
- 4. Welche praktischen Vorteile bieten deklarative UI-Sprachen wie XAML und QML?
- 5. Welche Java-Web-Frameworks bieten Hot-Reload?
- 6. Welche Sprachen bieten die Verwendung von Objektliteralen?
- 7. Windows: Welche Ordner bieten immer Schreibrechte?
- 8. Warum sind C# -Arrays kovariant und welche Vorteile bringt es?
- 9. Welche Vorteile bietet die Verwendung einer Schnittstelle in C#?
- 10. Welche Vorteile bietet Liquibase für Datenbankmigrationen?
- 11. Welche Vorteile hat die Definition eines Fremdschlüssels?
- 12. Welche Vorteile bietet Sass gegenüber normalem CSS?
- 13. Welche Vorteile hat RabbitMQ in Erlang?
- 14. Welche Vorteile bietet WCF gegenüber ASMX-Webdiensten?
- 15. Welche Vorteile bietet der Windows-Zertifikatspeicher?
- 16. Welche großen Vorteile bietet VS2010 SP1?
- 17. strncpy() Alternative - welche Vorteile für jede Version?
- 18. Welche Vorteile haben Typbeschränkungen in Protokollerweiterungen?
- 19. Welche Vorteile bietet Powershell anstelle von VBScript?
- 20. Welche Vorteile bietet java.nio für einen Webserver?
- 21. was Alternative für iostreams und stringstreams?
- 22. Welche Blogging-Plattformen bieten Tools für Entwickler-Blogger?
- 23. Welche Websites bieten kostenlose, qualitativ hochwertige Website-Design-Vorlagen?
- 24. Welche Seiten bieten kostenlose Wordpress-Themes, die sicher sind?
- 25. Welche Vorteile hat die Entwicklung einer Win32-Anwendung in C++ über eine .NET-Anwendung in C#?
- 26. Welche Vorteile bietet das benutzerdefinierte Speichermodell Cocos2d-x?
- 27. Welche Vorteile hat das Test Data Builder-Muster gegenüber Objektinitialisierern?
- 28. Enum in Java. Vorteile?
- 29. Komponist Vorteile
- 30. Welche Vorteile hat addLast in der LinkedList Java Core Collection?
Sie meinen cin und cout? Im Gegensatz zu C-style getc und printf? –
@Vanessa: OP bedeutet wahrscheinlich 'std :: stringstream', (' #include ') –
Bill
@Bill: ja ich meine das! –