Boost logo

Boost :

From: Yuval Ronen (ronen_yuval_at_[hidden])
Date: 2005-12-14 07:19:25


Frank Laub wrote:
>> If you have parse() and operator<<, then I guess adding operator>>
>> would be logical.
>
> Hrm, yes, but it's hard to write a templated operator>>. Currently I'm able
> to template the whole category of enumeration types by just having an
> overload for enum_base<T>. In the case of the operator>>, I can't output an
> enum_base<T>, it needs to be a T. So my question is, how do I write
> operator>> without making it overly generic?

In one of your previous messages you said that you have a

     template <typename base>
     struct safe_enum : base;

and the macro:

     BOOST_ENUM(Boolean,
         (False)
         (True)
     )

is expanded to:

     class Boolean_base
     {
         ...
     };
     typedef safe_enum<Boolean_base> Boolean;

If this is still the case, then why shouldn't this

     template <typename base>
     istream& operator>>(istream &, safe_enum<base> &)
     {
         ...
     }

work?

> OK, in order to support the stringtable version, I now allow the user to
> specify what the datatype of the value portion should be. This makes the
> enum_base extermely generic. So now it's:
> BOOST_ENUM_VALUES(VirtualKey, size_t,
> (Space)(0x20)
> ...
> )

Sounds great!

Any plans to request a review?


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