Template - pytanie

0

Kolega zaproponował mi metodę wyświetlania wektora obiektów klasy w taki sposób:

template<typename Stream>
void Samochod_Osobowy::show(Stream& out) {
	cout.width(15);
	out << marka << " ";
	cout.width(15);
	out << model << " ";
	cout.width(10);
	out << rok_prod << "r ";
	cout.width(15);
	out << silnik << " ";
	cout.width(10);
	out << moc << "KM ";
	cout.width(10);
	out << masa << "kg ";
	cout.width(20);
	out << typ;
}

gdzieś potem :

int lp = 1;
	for (auto a : tab) {
		cout << lp << "";
		a.show(cout); cout << endl;
		lp++;
	}
	cout << "\n";

I tu mam pytanie. Co to jest słowo kluczowe "out" oraz a.show(cout) i ogólnie szukam jak to działa dokładnie :/ Tab to wektor t`

3

out to nie jest słowo kluczowe, tylko nazwa zmiennej. a.show(cout) to wywołanie funkcji show obiektu a i przekazanie jej obiektu cout (std::cout) jako parametru.

1

Ja dodam, że ten szablon jest zupełnie zbędny, a mieszeni cout z out w tej implementacji poważnym błędem, który nie wychodzi, bo jedyny przypadek użycia tego kodu jest taki, że cout i out są równoważne.

Ja bym robił tak:

std::ostream& Samochod_Osobowy::show(std::ostream& out) const {
    out.width(15);
    out << marka << " ";
    ....

    return out;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1