所以我想假设我有以下类定义:
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++中执行此操作,如果是这样,我将如何处理它?
在C++中,变量不知道自己的名字.
您可以做的最好的事情是使用预处理器:
#define DECLARE_NAMED_INT(value, name) my_named_int name((value), #name);
Run Code Online (Sandbox Code Playgroud)
这就是说这不是惯用的C++,所以你可以考虑看一下你试图解决的真正问题并将其作为另一个问题.具体来说,我的意思是反射(这似乎是这个问题的内容)不是C++特性,因此这些问题通常以其他方式解决.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |