C++ 使用变量访问类的公共成员

Posted

技术标签:

【中文标题】C++ 使用变量访问类的公共成员【英文标题】:C++ Accessing Public Members of Class with a Variable 【发布时间】:2013-06-18 20:39:26 【问题描述】:

我需要通过局部变量调用已定义(公共)类的成员,我想知道如何做到这一点。我的问题是在类中调用哪个变量取决于一系列值,所以我真的需要使用变量来调用成员,而不是明确输入它的名称。例如:

我有类 Assumptions,有许多成员变量(所有感兴趣的都是 double 类型)。因此,假设我想在 Assumptions 中调用五个潜在变量,但只有其中一个:

    VariableStem_One VariableStem_Two VariableStem_Three VariableStem_Four VariableStem_Five

我的代码当前生成一个字符串,其内容等于上述五个术语之一 - 现在我只需要调用该成员变量 - 我可以间接这样做吗?所以我有一个名为“VariableKey”的变量,其内容等于上述五个变量之一 - 我想进行以下调用:

Assumptions.VariableKey

但是将 VariableKey 解释为间接引用。

这也是我的实际问题的抽象/简化 - 可能值的数量更像是 75,所以我想尽可能避免编码每个变量个体。

提前致谢!

【问题讨论】:

调用变量是什么意思?您的意思是根据变量的值调用特定的函数吗?你能 - 而不是使用字符串 - 使用指向函数的指针 - 并以这种方式选择适当的函数吗?或者,您可以将字符串映射到函数吗?那会是一个可行的解决方案吗?您事先了解全部功能吗?也许一些示例代码会有所帮助。 【参考方案1】:

您不能直接在 C++ 中执行此操作。更正常的方法是有一个枚举来指示要使用的变量,并设置它。然后你有一个值的数组/向量,枚举器充当该容器的索引。

您还可以创建将字符串映射到特定值的映射,但这可能会增加额外的开销。

【讨论】:

感谢您的解释 - 这非常有帮助。不幸的是,它为我带来了更多的工作,但很高兴知道答案:)【参考方案2】:

您正在尝试做的事情称为"reflection",而C++ 没有对它的本机支持;您可以考虑通过library 添加它,但将您的“Stem”成员变量放入字符串的map 以加倍会更容易。

【讨论】:

【参考方案3】:

你应该在 Assumption 类中添加一个选择方法,以 key 作为输入。

【讨论】:

以上是关于C++ 使用变量访问类的公共成员的主要内容,如果未能解决你的问题,请参考以下文章

未定义符号,使用指针 C++ 访问成员函数

子类是不是也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗?

c++里面的protect和public、private有啥区别?

访问基类的公共成员失败

如何从他们自己的类的成员函数中访问公共变量? (C ++)

方法不能访问同一类的成员变量 (C++)