【问题标题】:Is there a simple way to implement it in C++?有没有一种简单的方法可以在 C++ 中实现它?
【发布时间】:2016-10-21 06:25:34
【问题描述】:

我想实现一个函数,可以通过它的名字打印出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
}

【问题讨论】:

  • 你可以在结构体中声明函数,就像在类中一样
  • 只需调用带有参数data.aa的过程函数
  • 实际情况比这个复杂,不能直接调用。
  • 不,C++ 没有提供一种简单的方法来实现这一点。事实上,据我所知,它根本无法实现这一点

标签: c++


【解决方案1】:

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

这种用法一般见于脚本语言中。

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

【讨论】:

    【解决方案2】:

    您的原始代码示例对我来说毫无意义,因为如果您调用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,因此您可能会在使用宏时遇到同样的问题。这只是一个猜测,因为我不知道您使用的原始代码。

    【讨论】:

    • 是的,我找到了!我已经改了。
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 2010-09-06
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2017-07-05
    • 2011-03-02
    相关资源
    最近更新 更多