std::ostream
ma operator<<
przeciążenia, który odbiera wskaźnik do funkcji z podpisem, takich jak ta, którą napisał (number 11 in this list):
basic_ostream& operator<<(
std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&));
który właśnie nazywa podana funkcja przekazuje się jako argument. To przeciążenie (wraz z kilkoma podobnymi) służy do implementowania manipulatorów strumieniowych, tj. Rzeczy, które wyprowadzasz w strumieniu z <<
i zmienia stan stamtąd strumienia. Na przykład, nasza wersja z (niesłusznie) wszechobecny std::endl
mogą być realizowane jako
std::ostream &myendl(std::ostream &s) {
s<<'\n';
s.flush();
return s;
}
, które mogą być następnie dokładnie wykorzystywane jako „normalne” std::endl
:
std::cout<<"Hello, World!"<<myendl;
(faktyczna realizacja jest na matrycy i nieco bardziej skomplikowany, ponieważ musi działać nawet z szerokimi strumieniami, ale masz pomysł)
Istnieje przeciążony 'operator <<', który akceptuje funkcję i wywołuje ją. Jak dokładnie jest to niejasne? –
To jest sposób, w jaki działają różne przeciążenia 'std :: endl' lub' std :: flush'. –