在 C++ 中访问 class 个成员

Accessing class members in c++

我在很长一段时间后回到了 C++ 编码,想知道是否有一种方法可以快速访问 class 的数据成员以进行操作。

假设您在 class 中有大约 10 个数据成员,这会重载一堆运算符(在重载 operator= 时想到这一点)。现在你会想要 add/subtract 几个数据成员到 class。 有没有一种通用的方法来完成这个而不必去个别功能并改变它们?我正在考虑在一种循环结构中通过 class 的所有成员 运行 的可能性。

I'm thinking of a possibility of running through all the members of a class in a kind of loop construct.

不,这通常是不可能的,因为 标准 C++ 没有任何运行时反射机制,允许您通过符号访问 class 成员信息。


当然,您可以做的是将 class 成员变量 值保存在一种 std::map<std::string,T> 字典中,并使用符号访问这些值键(当然要替换实际的 class 成员变量)。

但这需要值类型为

由于 C++ 中没有内置反射(目前),您必须在某处列出所有成员。避免您一遍又一遍地这样做的一种方法是定义一个 for_each_member 方法,该方法将每个成员传递给某个仿函数:

template <class F>
void for_each_member(F f);

现在您可以轻松地对所有成员应用任意操作,并且您只需为每个 class.

维护一个成员列表

运行 示例:http://coliru.stacked-crooked.com/a/c813fc73c5519ee0

如果你想对不同的成员子集执行不同的操作,你必须找到一种方法将它们分开。您可以按类型执行此操作(如示例所示),或者您可以另外将某种标识符传递给 for_each_member.

中的函子

这里我使用宏将成员及其名称传递给仿函数:http://coliru.stacked-crooked.com/a/5a59c027e25c33fb