예를 들어 두 멤버가있는 구조체가 있습니다.
struct DataSet {
int x;
int y;
};
…, 그리고 메소드의 사람들에게 액세스해야하지만 한 번에 하나씩 만 액세스해야합니다.
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);
내가 원하는 출력 :
16
36
이와 같은 문제를 해결해야 할 때 어떻게해야합니까? 멤버에 액세스 할 수있는 데이터 유형이 있습니까?
답변
예, 포인터 투 멤버를 사용할 수 있습니다. 유형의 구문 TypeOfMember TypeOfStruct::*
은입니다.struct_variable.*pointer_variable
using StructMember = int DataSet::*; // Pointer to a member of `DataSet` of type `int`
void foo(StructMember dsm) {
DataSet ds;
ds.x = 4;
ds.y = 6;
std::cout << ds.*dsm * ds.*dsm << std::endl;
}
int main() {
foo(&DataSet::x);
foo(&DataSet::y);
}