Re: storing related structs
- From: Flash Gordon <spam@xxxxxxxxxxxxxxxxxx>
- Date: Sat, 30 Jun 2007 14:38:25 +0100
gw7rib@xxxxxxx wrote, On 30/06/07 13:25:
On 30 Jun, 13:15, "Army1987" <please....@xxxxxx> wrote:"Gray Alien" <g...@xxxxxxxxxxxxx> ha scritto nel messaggionews:Z7OdnWRcAeZVoxvbnZ2dnUVZ8vidnZ2d@xxxxxxxxx
<snip>
Where DATA_TYPE is EITHER a struct A or struct B.struct C {
For compatability with existing libraries, I cannot use a void * (for instance), and cast between struct A and B.
Is there a soln to this problem ?
unsigned id;
char name; /* do you mean *name, or name[LARGE_ENOUGH]? */
enum { strA, strB } type;
union {
struct A str_A;
struct B str_B;
} the_struct;
};
A union is like a struct, but can only hold an element at a time.
You access members of unions like members of struct. For example,
in the case above to access the double of a struct B in a struct C,
you'll have to use mystructC.the_struct.str_B.z
Or try to find a better way to do what you're trying to do.
To the OP: One way of doing it would be to use a union, as Army1987
has suggested. However, if space isn't an issue, you might do better
including both a struct A and a struct B, and just using the one that
you want. This would seem to have less chance of going horribly wrong,
and might make your code clearer. Is there some reason why this would
not work?
Hope that helps.
If it is only valid to have one or the other then a union expresses the intent better and if you are accessing the wrong member something has already gone horribly wrong.
--
Flash Gordon
.
- References:
- storing related structs
- From: Gray Alien
- Re: storing related structs
- From: Army1987
- Re: storing related structs
- From: gw7rib
- storing related structs
- Prev by Date: Re: storing related structs
- Next by Date: Re: Display C in HTML
- Previous by thread: Re: storing related structs
- Next by thread: Re: storing related structs
- Index(es):
Relevant Pages
|