我想实现一个函数,它可以通过它的名字打印出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
}
答案 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
,所以你可能会遇到使用宏的同一问题。这只是猜测,因为我不知道你正在使用的原始代码。