在 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 成员变量)。
但这需要值类型为
- 都是同一类型
- 类似于
std::experimental::any
由于 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
我在很长一段时间后回到了 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 成员变量)。
但这需要值类型为
- 都是同一类型
- 类似于
std::experimental::any
由于 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