Some of the standard iomanip
functions take take a parameter.
I'd like to know how this is accomplished, for instance, can I do something similar with a function? That's really the solution that I needed for this answer, but I couldn't figure out how to do this.
When I looked up the definition for setw
function for example in http://en.cppreference.com it lists the return type as "unspecified", and it also only lists one argument, rather than also taking a stream&
parameter. How does this work?
Note to the reader:
This question has an excellent answer but to the individual looking up this question; this answer will only be useful in combination with the following functionality provided by ios_base
:
Here is a simple example of a user-defined manipulator that takes one parameter defined using a class:
Manipulators that take no parameters can simply be implemented as
That's because
basic_ostream::operator<<
has an overload that takes a pointer-to-functionstd::ostream& (*fp)(std::ostream&)
as its right hand side (e.g., a manipulator)PS: The C++ Standard Library by N. Josuttis describes how manipulators/custom manipulators work in great detail, see Sec. 15.6.3 User-Defined Manipulators