【发布时间】:2020-04-01 23:35:25
【问题描述】:
我有一个包含两个成员的结构,例如:
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访问x和dsm = 4访问y,然后您可以像int val = int(*(&ds+dsm))一样访问它们。 -
@ocket8888
c++具有指向成员的指针,因此无需自定义指针黑客即可完成这项工作。 -
@eerorika 你是对的。以前我有两个字符串作为成员,但我将它们更改为 int's。我忘了删除“std::”。
标签: c++