Ale tá variantnosť mi stále uniká
Myslenka variantosti spociva v tom, ze chces do pameti o velikosti nejvetsi varianty
alternativne ukladat data v ruzne strukture. Obecne muze existovat cast spolecna vsem variantam, ktera typicky obsahuje diskriminator a spolecne hodnoty, pak v podstate libovolne mnozstvi variant o libovolne strukture - ovsem ta uz nesmi byt variantni. Predstavi si, ze chces do recordu nacpat informace o osobe, takze udelas neco takoveho (schematicky):
TPersonInfo = record
DatumNarozeni: TDate;
DatumUmrti: TDate;
...
Pohlavi: ESex; //Unknown, Male, Female, SheMale, ....
case ESex of
Unknown: ;
Male: (DelkaPtaka: integer; ObvodBicepsu:integer);
Female: (KozyVelikost: integer; ObvodPresBoky:integer);
SheMale: (DelkaPtaka: integer; ObvodBicepsu:integer; KozyVelikost: integer; ObvodPresBoky:integer);
...
end;
Clenove pred a vcetne
Pohlavi jsou spolecne,
Pohlavi je diskriminator, abys vedel, jake polozky z variantni casti mas pouzivat. Ovsem pokud to umis urcit jinak nez zkoumanim obsahu spolecne casti recordu, tak muzes diskriminator vypustit, stejne jako spolecna cast muze byt prazdna a pak mas spolecnou pamet, ktera muze mit pro kazdou variantu jinou strukturu (jiny pocet a velikost polozek) bez spolecne casti. Celkova pamet bude odpovidat nejvetsi variante, u mensich variant zustane zbytek
nedefinovanyA ta variantnost ti byla doporucovana proto, ze jsi nechapal, jak spravne sestavit bitiky uvnitr treba 32bitove hodnoty, takze v jedne variante bys tam nastrkal n ruznym enumu klidne v n-ruznych variantach a z druhe varianty si vyzvedl jednu hodnotu spolecneho chyboveho kodu chyboveho kodu, ve ktere je tech ruznych enumu zakodovano. A Vice versa. Ovsem za predpokladu, ze jsi dospel k nazoru, ze tvoje aplikace potrebuje jeden chybovy kod. Pokud ho nepotrebuje, nemusis zadny variantni record pouzivat.