Boost logo

Boost :

From: Jonathan Turkanis (technews_at_[hidden])
Date: 2005-03-03 14:06:15


Thorsten Ottosen wrote:

>> The return type already serves a dual purpose: it can store a
>> character or an EOF indication. Unfortunately, with non-blocking or
>> async i/o there are now three possible results of a call to get:
>>
>> 1. A character is successfully retrieved.
>> 2. The end of the stream has been reached.
>> 3. No characters are currently available, but more may be available
>> later.
>
> isn't this a job for boost::optional<int> ?

Actually,

    template<typename Source>
    int get(Source&);

should really be

    template<typename Source>
    optional<char> get(Source&);

so maybe I should use optional< optional<char> > ;-)

Seriously, I think the trouble with this suggestion is that EOF and EAGAIN
really deserve equal treatment, whereas with optional<int>, the former would be
represented as part of the int and the latter would be represented as the
absence of an int. If use optional<int> (which I don't dismiss), there will be
lots of tests like

     if (c && c.get() != EOF)

where otherwise you would have

    if (c.good())

Jonathan


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