Boost logo

Boost :

From: Moore, Paul (Paul.Moore_at_[hidden])
Date: 2000-03-07 05:43:26


From: Marco Manfredini [mailto:marco_at_[hidden]]
[...]
> Are there are substatial problems with the ideas? could they
> be useful? Or are they simply stupid animal tricks :-)

I like this idea. Both the implementation for formatting, and the
"capturing" process for streams. On a vaguely related note, I once
implemented (what I thought was) a neat little trick to do formatted
messages on Windows using streams.

Basically, the idea is to make a class derived from stringstream with a
destructor which picks up what is in the stream and "does something" with it
- in my case, passes it to the Windows MessageBox() function. To use the
class, construct a temporary object of that class and write to it.
Temporaries are destroyed at end of statement, so the destructor action
happens when you hit the semicolon. Ie,

    MyClass() << "This is some output, you can do numbers, too: " << hex()
<< 1234;

This relies on the rule that temporaries are destroyed at the end of the
full expression where they are created. As far as I can see, this rule means
that the example works, but it also means that it's a little fragile in
practice.

Does anyone have any comments? Is this a good idea, or is there a better
approach?

Paul

--- cut here ---

class MB : public stringstream {
    const char *t;
public:
    MB(const char *title = "Application Message") : t(title) {}
    ~MB() { ::MessageBox(0, str().c_str(), t, 0); }
};

int main()
{
    MB("Hello") << "This is message number " << 1;
    MB() << "This is message number " << 2;
    return 0;
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk