[c++] C ++에서 변수를 통해 구조체의 멤버에 액세스

예를 들어 두 멤버가있는 구조체가 있습니다.

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);
}


답변