Boost logo

Boost Users :

From: Eric Friedman (ebf_at_[hidden])
Date: 2005-02-02 16:32:40


I can imagine cases where the current behavior might be preferable
(e.g., uses of variant types in generic contexts). But I think for the
vast majority of cases, and especially in non-generic contexts, checking
the type as you propose is a good idea.

I will determine a way to work this into the library, either by
modifying the semantics of boost::get or by introducing a new accessor
function. Thanks for the input.

Eric Friedman
Co-author of Variant library

Yuval Ronen wrote:
>>>I encountered the need to query a boost::variant to which type it
>>>currently contain. I'm talking about something like:
>>>variant<int, string> v(3);
>>Take a look at get(), it's almost what you need. Unfortunately, it
>>compiles even when the type cannot be inside the variant. This can be
>>fixed with mpl::contains:
>>template<typename T, typename Variant>
>>bool variant_is_a(const Variant& v)
>> BOOST_MPL_ASSERT(( boost::mpl::contains<typename
> Variant::types,T> ));
>> return boost::get<T>(&v) != 0;
>>There should be a version of get that works as variant_is_a above. IMHO,
>>the current behaviour is more dangerous than that of variant_is_a, so
>>get() should be changed and maybe a new function be created that keeps the
>>current behaviour. Some code may break with this change with a compile
>>error that would go away if the other version of get is used.
> Your code works beautifully. I really hope this feature will find its way to
> the variant library.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at