在c ++中访问类成员

时间:2016-05-25 17:18:15

标签: c++ class-members

我在很长一段时间后用C ++编写代码,并且想知道是否有办法快速访问类的数据成员进行操作。

假设一个类中有10个数据成员重载一堆运算符的情况(在重载operator =时考虑到这一点)。现在,您希望将一些数据成员添加/减去该类。 有没有通用的方法来实现这一点,而无需去个别功能并改变它们?我想到了在一种循环结构中运行类的所有成员的可能性。

2 个答案:

答案 0 :(得分:2)

由于C ++中还没有内置反射,你必须在某处列出所有成员。一次又一次地避免这样做的一种方法是定义一个template <class F> void for_each_member(F f); 方法,将每个成员传递给一些仿函数:

for_each_member

现在,您可以轻松地对所有成员应用任意操作,并且您只需要为每个类维护一个成员列表。

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

如果要对成员的不同子集执行不同的操作,则必须找到将这些操作分开的方法。您可以通过类型执行此操作(如示例中所示),或者您还可以在criteria.add(Restrictions.ilike("name", queryString, MatchMode.START)); criteria.addOrder(Property.forName("custId").desc("count")); 中将某种标识符传递给您的仿函数。

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

答案 1 :(得分:0)

  

我想到了在一种循环结构中运行类的所有成员的可能性。

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

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

但这需要值类型为