Angenommen, ich möchte throw
mit einer Zeichenfolge, die Informationen über ein Objekt enthält, aber die Objekt-Implementierung hat nur eine Überladung für den Stream-Operator (<<
) statt eine Umwandlung in Zeichenfolge. Ich möchte so etwas wie dies zu tun:Kann ich die Überladung des Stream-Operators ohne ein Stream-Objekt aufrufen?
throw std::runtime_error("Error, encountered invalid value " + x);
wo x
eine Instanz eines Typs ist, der hat (<<
) überlastet. Das obige funktioniert jedoch nicht, da +
nicht zu einem Typ überkomprimiert wird, der mit const char*
kompatibel ist. Wenn x
einen String (oder gießbaren in einen String) waren es funktionieren würde, aber stattdessen muss ich dies tun:
std::stringstream s;
s << "Error, encountered invalid value " << x;
throw std::runtime_error(s.str());
Wie kann ich etwas so prägnant wie im ersten Beispiel erhalten, ohne Überlastungen oder benutzerdefinierte Funktionen hinzufügen. Bietet die Standardbibliothek einige Funktionen, die hier helfen?
Überlastung 'operator + (std :: string &, X &)' – 101010
Können Sie nicht Überladen Sie das +, um dem Objekt eine Zeichenfolge hinzuzufügen? – MiltoxBeyond
@MiltoxBeyond Ich könnte, aber ich stelle die Frage zu sehen, ob es möglich ist, es zu tun, ohne überhaupt neue Funktionen/Überlastungen zu schreiben. – arman