Bueno, no directamente. Pero puede lograrlo utilizando un conjunto de punteros "índice" temporales adicionales de tipo puntero a miembro.
Por ejemplo
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;
Por supuesto, si tiene que hacerlo a menudo, se puede utilizar una matriz de índice permanente rect_members
inicializado en el arranque del programa.
Tenga en cuenta que este método no emplea ningún ataque, como lo hacen algunos otros métodos. Los punteros de tipo puntero a miembro rara vez se utilizan, pero esta es en realidad una de las cosas para las que fueron introducidos.
Una vez más, si es necesario hacerlo a menudo, lo más apropiado para hacerlo sería hacer que la matriz de punteros un miembro static const
de la estructura
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 };
y cuando se necesita para iterar sobre estos miembros, se Acabo de acceder a elementos de estructura como s.*rect::members[i]
.
Si todos los miembros del mismo tipo, no pueden ponerlos en una matriz ('int members_ [4];'? Y proporcionar accesos ('int rect :: x() const;') y mutadores (' void rect :: x (int); ')? Debe escribir el código en un lugar u otro :) – Arun
Al definir tipos en C++, pierda typedef. –