Zagnieżdżona struktura anonimowa - jak uzyskać do niej dostęp?

0

Witam!!
mam taki kod

#if (defined(_XM_X86_) || defined(_XM_X64_)) && defined(_XM_NO_INTRINSICS_)
typedef struct _XMMATRIX
#else
typedef _DECLSPEC_ALIGN_16_ struct _XMMATRIX
#endif
{
    union
    {
        XMVECTOR r[4];
        struct
        {
            FLOAT _11, _12, _13, _14;
            FLOAT _21, _22, _23, _24;
            FLOAT _31, _32, _33, _34;
            FLOAT _41, _42, _43, _44;
        };
        FLOAT m[4][4];
    };

#ifdef __cplusplus

    _XMMATRIX() {};
    _XMMATRIX(FXMVECTOR R0, FXMVECTOR R1, FXMVECTOR R2, CXMVECTOR R3);
    _XMMATRIX(FLOAT m00, FLOAT m01, FLOAT m02, FLOAT m03,
              FLOAT m10, FLOAT m11, FLOAT m12, FLOAT m13,
              FLOAT m20, FLOAT m21, FLOAT m22, FLOAT m23,
              FLOAT m30, FLOAT m31, FLOAT m32, FLOAT m33);
    _XMMATRIX(CONST FLOAT *pArray);

    FLOAT       operator() (UINT Row, UINT Column) CONST { return m[Row][Column]; }
    FLOAT&      operator() (UINT Row, UINT Column) { return m[Row][Column]; }

    _XMMATRIX&  operator= (CONST _XMMATRIX& M);

#ifndef XM_NO_OPERATOR_OVERLOADS
    _XMMATRIX&  operator*= (CONST _XMMATRIX& M);
    _XMMATRIX   operator* (CONST _XMMATRIX& M) CONST;
#endif // !XM_NO_OPERATOR_OVERLOADS

#endif // __cplusplus

} XMMATRIX;

i teraz tak, na samym początku unia jak i zagnieżdżona wewnątrz struktura nie mają określonych nazw, jak się potem do tego odwołać??
jak robię sobie anonimowe i od razu nie podam zmiennych to potem nie utworze egzemplarze takiej struktury/uni
o co w tym chodzi??
oczywiście w tej konkretnej strukturze sa już metody do obsługi tego, ale jak bym sobie sam takie zrobił to jak się odwoływać do tego.

2

Normalnie:

typedef float FLOAT,XMVECTOR[4];
typedef struct _XMMATRIX
{
    union
    {
        XMVECTOR r[4];
        struct
        {
            FLOAT _11, _12, _13, _14;
            FLOAT _21, _22, _23, _24;
            FLOAT _31, _32, _33, _34;
            FLOAT _41, _42, _43, _44;
        };
        FLOAT m[4][4];
    };
} XMMATRIX;


   XMMATRIX X;
   X.r[1][1]=5;
   X._22=6;
   X.m[1][1]=7;
1

Gdybyś miał się tam dostawać, to twórca biblioteki by Ci dał dostęp. Tutaj widać wyraźne zamierzenie odwrotne.
Napisałem bzdurę. Patrz post powyżej.

Przy okazji: nazwy zaczynające się od wielkiej litery poprzedzonej podłogą są zarezerwowane dla implementacji, więc technicznie użycie tej struktury to UB.

0

Więc jaki jest sens zagnieżdżania takiej struktury??
O czytelność chodzi??

0
kq napisał(a):

Przy okazji: nazwy zaczynające się od wielkiej litery poprzedzonej podłogą są zarezerwowane dla implementacji, więc technicznie użycie tej struktury to UB.

Cyfry to nie wielkie litery.

0

Pewnie po to, żebyś mógł się odwołać przez nazwy typu X._11, X._12 zamiast X.m[0][0], X.m[0][1]. Zauważ, że indeksy się różnią, może komuś łatwiej liczyć od 1 zamiast 0? Czytelność w tym przypadku jest kwestią dyskusyjną IMHO.

0

ale równie dobrze moge dać te zmienne bez struktury, ale z drugie strony w uni będę mógł mieć tylko jedną naraz, a jak mam taką strukture to będą wszystkie istnieć wewnątrz tej struktury??

1 użytkowników online, w tym zalogowanych: 0, gości: 1