<分区>
很长一段时间后,我重新开始使用 C++ 编写代码,想知道是否有一种方法可以快速访问类的数据成员以进行操作。
假设一个类中有大约 10 个数据成员,它重载了一堆运算符(在重载 operator= 时想到了这一点)。现在您想要向类中添加/减去一些数据成员。 有没有一种通用的方法来完成这个而不必去个别功能并改变它们?我正在考虑在一种循环结构中遍历一个类的所有成员的可能性。
标签 c++ class-members
<分区>
很长一段时间后,我重新开始使用 C++ 编写代码,想知道是否有一种方法可以快速访问类的数据成员以进行操作。
假设一个类中有大约 10 个数据成员,它重载了一堆运算符(在重载 operator= 时想到了这一点)。现在您想要向类中添加/减去一些数据成员。 有没有一种通用的方法来完成这个而不必去个别功能并改变它们?我正在考虑在一种循环结构中遍历一个类的所有成员的可能性。
最佳答案
由于 C++ 中还没有内置反射(目前),您必须在某处列出所有成员。避免您一遍又一遍地执行此操作的一种方法是定义一个 for_each_member
方法,该方法将每个成员传递给某个仿函数:
template <class F>
void for_each_member(F f);
现在您可以轻松地对所有成员应用任意操作,并且您只需为每个类维护一个成员列表。
运行示例:http://coliru.stacked-crooked.com/a/c813fc73c5519ee0
如果您想对不同的成员子集执行不同的操作,您必须找到一种方法将它们分开。您可以按类型执行此操作(如示例所示),或者您可以另外将某种标识符传递给 for_each_member
中的仿函数。
这里我使用宏将成员及其名称传递给仿函数:http://coliru.stacked-crooked.com/a/5a59c027e25c33fb
关于c++ - C++访问类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443779/