Funktion druckt etwas auf std::ostream und gibt std::ostream?

Ich möchte eine Funktion schreiben, die Ausgänge etwas zu einem ostream übergeben wird, und die Rückkehr der stream, wie diese:

std::ostream& MyPrint(int val, std::ostream* out) {
  *out << val;
  return *out;
}

int main(int argc, char** argv){
    std::cout << "Value: " << MyPrint(12, &std::cout) << std::endl;
    return 0;
}

Wäre es bequem zum ausdrucken der Wert wie diese und Betten Sie die Funktion aufrufen, die in der Ausgabe-operator Kette, wie ich in main().

Es nicht funktioniert, aber, und druckt diese:

$ ./a.out
12Value: 0x6013a8

Die gewünschte Ausgabe wäre:

Value: 12

Wie kann ich dieses Problem beheben? Muss ich zum definieren einer operator<< statt?

UPDATE: Geklärt, was die gewünschte Ausgabe wäre.

UPDATE2: Einige Leute nicht verstehen, warum ich drucken würde eine Nummer wie das mit einer Funktion anstelle von drucken es direkt aus. Dies ist ein Vereinfachtes Beispiel, und in Wirklichkeit die Funktion drucken Sie ein Komplexes Objekt, anstatt ein int.

Warum sind Sie vorbei, die stream über einen Zeiger anstatt über areference?
Vielleicht hat er ' s gelesen, die Google-style guide und kaufte sich in dieser "nicht verwenden non-const Referenz-Parameter" Mode, die gehen, um.
Auch, was ist der Punkt nicht zu tun cout << "Value: " << 12; wie @Neil empfiehlt? Das scheint die meisten geradlinig Lösung.
und @onebyone: ja, ich begann mit dem google-Konventionen.
Re: UPDATE2 -- drucken Sie diese komplexen Objekts von Euch, warum sich nicht einfach definieren einer neuen überladenen std::operator<< für diesen Typ, genau wie jeder andere normale Klasse verwendet?

InformationsquelleAutor Frank | 2009-07-06

Schreibe einen Kommentar