Boost logo

Boost Users :

From: Jeffrey Holle (jeff.holle_at_[hidden])
Date: 2004-11-14 17:54:51


Something like:

class Data
{
   Data(float item) : type(float),float_datum(item) {}
   Data(uint32_t item) : type(uint32_t),uint32_datum(item) {}
private:
   enum { float, uint32_t} type;
   union {
     float float_datum;
     uint32_t uint32_datum;
   };
}

This is called an anonymous union.
The caviot is C++ does allow classes within unions. Its because the
compiler wouldn't know which default constructor to call...
If you need to handle classes, its time to start using pointers too.

Stephen torri wrote:
> On Sun, 2004-11-14 at 10:42 -0500, Jeffrey Holle wrote:
>
>>You can't use templates in this manner.
>>Ask yourself, which type of Data object do you expect boost.graph to
>>instanciate when a new vertex is created? It can only make one choice.
>
>
> I know that this was broken. I made the declaration that it was.
>
>
>>If I was doing this, and was concerned about memory consumption, I'd
>>consider using a union attribute in Data, along with a type attribute.
>
>
> Can you provide a simple example using the two types I gave in this
> example: float and uint32_t?
>
> Stephen


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