Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2006-06-28 14:18:38


Nat,
thanks for the quick reply! Unfortunately, people ideally would like to work
with this data types without any functions and my job is to give them type
safety ;)
 
The scenario should be:
 
 
struct PossibleValues
{
    
    accessor<0> value_name_0(my_union);
    accessor<1> value_name_1(my_union);
    
    accessor<N> value_name_n(my_union);
private:
    discriminated_union<mpl_vector_over_pairs> my_union;
};
 
 
 
usage:
 
 
void ValueHandler(PossibleValues& ps)
{
    if(ps.value_name_0)
        ps.value_name_0->netsted_value = new_value;
   ....
}
 
Accessor makes havy usage of mpl::if_, enable_if, etc. so that -> operator
works will regular types, pointer types, types where the -> operator is
defined etc... Accessor analyses the type associated with the discrminator
and overloads a correct set of functions/operators for that type. For
example, if a stored type is pointer -> returns the pointer itself, if the
stored type is normal object the address of it is returned, but if the type
contains the -> operator then the object is returned by value (in case of
shared_ptr, because you can not apply the -> operator twice ->->).
 
 
 
Thanks,
Ovanes
 
 
 



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net