Cóż, nie bezpośrednio. Ale możesz to osiągnąć, używając dodatkowej tymczasowej tablicy "index" wskaźników typu wskaźnik-do-członka.
Na przykład
rect a_rect[100];
int factor;
...
// We need to multiply all members of all elements of `a_rect` array by `factor`
// Prepare index array
int rect::*rect_members[4] = { &rect::x, &rect::y, &rect::width, &rect::height };
// And multiply
for (i = 0; i < 100; ++i)
for (j = 0; j < 4; ++j)
a_rect[i].*rect_members[j] *= factor;
Oczywiście, jeśli trzeba to robić często, można wykorzystać stałą tablicę indeksu rect_members
zainicjowany przy starcie programu.
Należy zauważyć, że metoda ta nie zatrudnia żadnych hacków, jak niektóre inne metody zrobić. Wskaźniki typu wskaźnik-do-członka są rzadko używane, ale jest to jedna z rzeczy, dla których zostały wprowadzone.
Ponownie, jeśli trzeba to robić częściej, właściwa rzecz do zrobienia byłoby uczynić tablicę ruchy wskaźnika do static const
członkiem struct
struct rect
{
int x;
int y;
int width;
int height;
static int rect::* const members[4];
};
int rect::* const rect::members[4] = { &rect::x, &rect::y, &rect::width, &rect::height };
i kiedy trzeba iteracyjne nad tych członków, ty 'd tylko dostęp do elementów struktury jako s.*rect::members[i]
.
Jeśli wszystkich członków tego samego typu, nie możesz umieścić ich w tablicy ('int members_ [4];'? I zapewnić accessors ('int rect :: x() const;') i mutators (' void rect :: x (int); ')? Musisz napisać kod jedno miejsce lub drugie :) – Arun
Podczas definiowania typów w C++, tracisz typedef. –