Example of Defining a MANIP Parameterized Manipulator

In the following example, the macro IOMANIPdeclare is called with the user-defined class my_class as an argument. One of the classes that is produced, OMANIP(my_class), is used to define the manipulator pre_print().

#include <iostream.h>
#include <iomanip.h>
class my_class {
   public: char * s1;
   const char c;
   unsigned short ctr; 
   my_class(char *theme, const char suffix,
        unsigned short times):
        s1(theme), c(suffix), ctr(times) {};
   };
// print a character an indicated number of times
// followed by a string
ostream& produce_prefix(ostream& o, my_class mc) {
   for (register int i=mc.ctr; i; --i) o << mc.c ;
   o << mc.s1;
   return o;
}
IOMANIPdeclare(my_class); 
// define a manipulator for the class my_class
OMANIP(my_class) pre_print(my_class mc) {
   return OMANIP(my_class) (produce_prefix,mc);
}
void main() {
   my_class obj("Hello",'-',10);
   cout << pre_print(obj) << "\0" << endl;
} 

This example produces the following output:

----------Hello