通过C ++中的变量访问结构中的成员


10

我有两个成员的结构,例如:

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

当我必须解决此类问题时该怎么办?是否存在可以访问成员的数据类型?


我唯一想到的就是可以使用指针算法。您可以将结构“成员”作为相对于结构开头的偏移量传递。这将取决于成员的大小。随着整型我想你能保证他们会与字边界,所以你通过dsm = 0访问xdsm = 4访问y,那么你访问他们喜欢int val = int(*(&ds+dsm))
ocket8888

1
@ ocket8888 c++具有指向成员的指针,因此无需自定义指针hack即可使其工作。
超级

@eerorika你是对的。以前我有两个字符串作为成员,但是我将它们更改为int。我忘了删除“ std ::”。
阿德里安

Answers:


10

是的,您可以使用指向成员的指针。类型的语法是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);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.