Chcę napisać funkcję, która wyprowadza coś do ostream
która jest przekazywana w, i powrócić do strumienia, jak poniżej:Funkcja, która drukuje coś na std :: ostream i zwraca std :: ostream?
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;
}
byłoby wygodne, aby wydrukować wartość takiego i osadzić wywołanie funkcji w łańcuch wyjściowy operatora, tak jak w przypadku main()
.
To nie działa, jednak i drukuje:
$ ./a.out
12Value: 0x6013a8
pożądany wynik byłby ten:
Value: 12
Jak mogę rozwiązać ten problem? Czy muszę zamiast tego zdefiniować operator<<
?
AKTUALIZACJA: Wyjaśniono, jaka będzie żądana moc wyjściowa.
UPDATE2: Niektórzy ludzie nie rozumieli, dlaczego wydrukowałbym taką liczbę, używając funkcji zamiast bezpośredniego drukowania. Jest to uproszczony przykład, w rzeczywistości funkcja wypisuje obiekt złożony, a nie int
.
Dlaczego przekazujesz strumień przez wskaźnik, a nie za pośrednictwem kryterium? –
Może czytał przewodnik w stylu Google i kupił ten styl mody "nie używaj niestacjonarnych parametrów odniesienia". –
Ponadto, o co chodzi z tym, że nie robimy "cout <<" Wartość: "<< 12;' jak @Neil zaleca? To wydaje się najbardziej proste rozwiązanie. –