Re: storing related structs
- From: gw7rib@xxxxxxx
- Date: Sat, 30 Jun 2007 05:25:03 -0700
On 30 Jun, 13:15, "Army1987" <please....@xxxxxx> wrote:
"Gray Alien" <g...@xxxxxxxxxxxxx> ha scritto nel messaggionews:Z7OdnWRcAeZVoxvbnZ2dnUVZ8vidnZ2d@xxxxxxxxx
I have two related structs:
struct A
{
int x ;
void * data ;
};
and
struct B
{
int x, y ;
double z ;
void * data1, *data2 ;
};
These structures (not pointers to them), need to be stored in a another struct:
struct C
{
unsigned id ;
char name ;
DATA_TYPE the_struct ;
};
Where DATA_TYPE is EITHER a struct A or struct B.
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 ?
struct C {
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.
Paul.
.
- Follow-Ups:
- Re: storing related structs
- From: Flash Gordon
- Re: storing related structs
- References:
- storing related structs
- From: Gray Alien
- Re: storing related structs
- From: Army1987
- storing related structs
- Prev by Date: Re: storing related structs
- Next by Date: Re: reply the answer
- Previous by thread: Re: storing related structs
- Next by thread: Re: storing related structs
- Index(es):
Relevant Pages
|