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);
}
推荐阅读
- html - 在 Outlook 中呈现时,如何从电子邮件签名中的 HTML 表格单元格顶部删除白线?
- reactjs - 完成拖放后,如何从 ListItem 获取值到 TextField?
- python - ImportError:找不到'cudart64_100.dll
- google-bigquery - 使用 web-ui 插入到带有模板后缀的 BigQuery 表中
- r - mapply 的稀疏矩阵
- kubernetes - GKE、Stackdriver Kubernetes Engine Monitoring 和自定义日志格式
- python-3.7 - 10个错误答案的邻居?
- r - 使用 dplyr 分组后如何计算新列
- vbscript - 在网络 PC 上运行脚本时出现 Windows 脚本主机错误 800A004C
- apache-spark - 在 spark 独立模式下,master 和 executor 是否位于一台机器上?