Czy związki mają strukturę kontrolną, aby sprawdzić, który członek jest aktualnie w użyciu (lub czy w ogóle jest w użyciu)? Pytam o to, ponieważ niezdefiniowane zachowanie nigdy nie jest dobre w twoim programie.Testowany na obecność obecnego członka w Unii
8
A
Odpowiedz
12
Nie, żaden taki mechanizm nie istnieje na półce. Musisz się tym zająć. Zwykle podejście jest owijanie union
w struct
:
struct MyUnion
{
int whichMember;
union {
//whatever
} actualUnion;
};
Więc trzeba MyUnion x;
i x.whichMember
powie Ci, która dziedzina x.actualUnion
jest w użyciu (trzeba zaimplementować funkcjonalność chociaż).
+1: Ten typ struktury jest często określany jako "związek dyskryminowany" lub "oznaczony związek". –
Tak, myślałem o podobnym podejściu, ale ponieważ preferuję konstrukcje językowe dla tych, którzy są samoukami, po prostu musiałem wiedzieć, czy ktoś istnieje. Dzięki za szybką odpowiedź. –