有没有一种简单的方法在C ++中实现它?

时间:2016-10-21 06:25:34

标签: c++

我想实现一个函数,它可以通过它的名字打印出struct('Data')的一个成员变量(例如'aa')的值。 我尝试使用宏定义如下,但失败了。 有没有一种简单的方法来实现它?

#include <string>
#include <iostream>
using namespace std;
struct Data
{
    int aa;
    int bb;
    int cc;
    Data(): aa(1),bb(2),cc(3) {};
};

#define Param(a,b) a.##b

void Process(Data& data, const string& name)
{
    cout << Param(data, name) << endl;
}

void main()
{
    Data data;

    Process(data, "aa");//I want print the value of Data.aa
    Process(data, "bb");//I want print the value of Data.bb
    Process(data, "cc");//I want print the value of Data.cc
}

2 个答案:

答案 0 :(得分:1)

这在C ++中是不可能的。

这种用法通常见于脚本语言。

在C ++中,变量名称是在编译时构造的。

答案 1 :(得分:0)

您的原始代码示例对我没有意义,因为如果您调用Param(name),那么编译器必须知道它必须使用哪个Data实例来确定您想要的成员变量的值得到的价值(但我既不是使用宏的专家也不是我非常喜欢它们。)

我尝试使用以下方法解决您的问题:

struct Data
{
    int aa;
};

#define GetMemberValue(d, n) d.##n

int main()
{
    Data d;

    d.aa = 3;

    int i = GetMemberValue(d, aa);
}

在这种情况下,至少这种方法会返回正确的结果。

另一件事是你声明你不能直接调用成员变量,即data.aa,所以你可能会遇到使用宏的同一问题。这只是猜测,因为我不知道你正在使用的原始代码。