如何编写一个"知道"自己的变量名的类

Xir*_*ema 3 c++

所以我想假设我有以下类定义:

class my_named_int {
public:
    int value;
    const string name;
    my_named_int(int _value, /*...Does Something Go Here...?*/);
};
Run Code Online (Sandbox Code Playgroud)

我想要的是,如果我写下面的代码:

int main() {
    my_named_int my_name(5);
    std::cout << my_name.name << ":" << my_name.value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

my_name:5
Run Code Online (Sandbox Code Playgroud)

显然,解决这个问题的最简单方法是编写如下代码:

class my_named_int {
public:
    int value;
    const string name;
    my_named_int(int _value, const string & _name);
};

int main() {
    my_named_int my_name(5, "my_name");
    std::cout << my_name.name << ":" << my_name.value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,当然,这会增加我的代码的重复性.有没有办法在没有变量名称的"双重写入"的情况下在C++中执行此操作,如果是这样,我将如何处理它?

Mar*_*k B 7

在C++中,变量不知道自己的名字.

您可以做的最好的事情是使用预处理器:

#define DECLARE_NAMED_INT(value, name) my_named_int name((value), #name);
Run Code Online (Sandbox Code Playgroud)

这就是说这不是惯用的C++,所以你可以考虑看一下你试图解决的真正问题并将作为另一个问题.具体来说,我的意思是反射(这似乎是这个问题的内容)不是C++特性,因此这些问题通常以其他方式解决.