Eu tenho uma estrutura com dois membros, por exemplo:
struct DataSet {
int x;
int y;
};
... e eu tenho que acessar aqueles em um método, mas apenas um de cada vez, por exemplo:
void foo(StructMember dsm) { // ("StructMember" does not exist)
DataSet ds;
ds.x = 4;
ds.y = 6;
std::cout << ds.dsm * ds.dsm << std::endl;
}
foo(x);
foo(y);
Saída que gostaria de ter:
16
36
O que devo fazer quando tiver que resolver um problema como este? Existe um tipo de dados que pode acessar um membro?
dsm = 0
para acessarx
edsm = 4
acessary
, e acessaria como gostariaint val = int(*(&ds+dsm))
.c++
possui ponteiro para membros, portanto, não há necessidade de hacks de ponteiro personalizados para fazer esse trabalho.Respostas:
Sim, você pode usar um ponteiro para membro. A sintaxe para o tipo é
TypeOfMember TypeOfStruct::*
e, para acessá-lo,struct_variable.*pointer_variable
fonte