std::ostream& (*f)(std::ios &)
- это указатель на функцию с именем f
, который указывает на функцию, которая принимает std::ios &
в качестве единственного параметра и возвращает std::ostream&
. Это необходимо для некоторых потоковых манипуляторов , таких как std::endl
, которые являются функцией, а не объектом, подобным std::cout
is.
С этой перегрузкой вы можете направить функцию в ваш поток и заставить эту функцию выполнять какие-то манипуляции с потоком
Не надо, чтобы эта сигнатура функции была не тем, что вы действительно хотите. Тип входного параметра и тип возвращаемого значения должны быть одинаковыми. Стандартные перегрузки для operator <<
, которые принимают функции манипулятора:
basic_ostream& operator<<(
std::ios_base& (*func)(std::ios_base&) );
basic_ostream& operator<<(
std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );
basic_ostream& operator<<(
std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&) );
basic_istream& operator>>(
std::ios_base& (*func)(std::ios_base&) );
basic_istream& operator>>(
std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );
basic_istream& operator>>(
basic_istream& (*func)(basic_istream&) );