|
Boost : |
Subject: Re: [boost] Enum Conversion
From: Ilya Bobyr (ilya.bobir_at_[hidden])
Date: 2012-09-03 19:01:50
On 9/2/2012 1:46 PM, Vicente J. Botet Escriba wrote:
> [...]
> I managed defining a specific opaque type, let me say MyGreek, and
> defining implicit conversions from these types.
>
> Your example could be written as
>
> std::cout << string(MyGreek(1)) << std::endl;
> std::cout << string(MyGreek(6)) << std::endl;
> std::cout << MyGreek(Alpha) << std::endl;
> std::cout << MyGreek::Alpha << std::endl; // using nested literal
> std::cout << string(MyGreek(Alpha)) << std::endl;
> std::cout << string(MyGreek::Alpha) << std::endl; // using nested literal
> std::cout << MyGreek(17) << std::endl;
>
>
> If think this interface corresponds more to how C++ conversions work
> (IMO of course).
>
>
>> (Or
>> does boost even offer something like that already?)
> I don't think so. The closest could be TBoost.Enums in the sandbox,
> but this library generates the enum and don't do the mapping.
I think that it can do both plain enums and enums that map to arbitrary
types. Here is an example where string are associated with enum values:
http://stackoverflow.com/a/439004
The syntax is different but the function is the same.
BOOST_ENUM_VALUES(Greek, int,
(Alpha)(5),
(Beta)(3),
(Gamma)(7),
(Delta)(1),
(Epsilon)(6)
);
/*
class Greek {
...
typedef boost::optional<Greek> optional;
...
*/
Level::optional gammaVal = Level::get_by_name("Gamma");
-- Ilya Bobyr
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk