Listing 3
#include "streamstate.h" #include <iostream> #include <ostream> using namespace std; // the "state" object struct bracketing { bracketing(char l = '(', char r = ')') : left_(l), right_(r) {} char left_, right_; }; // the hypothetical complex class class mycomplex { public: ostream& print(ostream &os) const { // get the stream state from the // slot dedicated to "bracketing" bracketing &b = streamstate<bracketing>::get(os); return os << b.left_ << re_ << ", " << im_ << b.right_; } // other operations and members as in Listing 1. }; // inserter for mycomplex and setbrackets as in Listing 1. // ... ostream & operator<<(ostream &os, bracketing b) { // set the stream state in the private slot streamstate<bracketing>::get(os) = b; return os; } int main() { /* ... */ }