gpt4 book ai didi

c++ - 将成员变量名转换为字符串

转载 作者:行者123 更新时间:2023-11-30 04:19:53 47 4
gpt4 key购买 nike

我可以在 C++ 中枚举类(或结构)的 char* 成员吗?如果可以,我可以将变量名称打印为字符串吗?使用预处理器?

我有一个包含所有 const char* 成员的类。如果有一种优雅的方法来枚举每个成员变量并根据我给出的字符串键检查名称作为字符串,那就太好了。

下面是那种可以使用的代码?

谁能想出办法做到这一点?

class configitems {
public:
configitems() : host(0), colour(0) {}
const char* host;
const char* colour;
//... etc
};

int main() {

configitems cfg;
//cfg.colour = "red";

//receive an config item as a string. I want to check that the item is a valid one (eg is a
//variable of class configitem) and then populate it.

//eg get colour=red so want to do something like this:
if(isConfigItem("colour")) {
cfg.<colour> = "red";
}
return 0;
}

最佳答案

正如其他人所说,一旦编译器完成编译代码,变量名称实际上并不存在于生成的代码中。它可能存在于调试符号或类似的符号中,但是试图进入以确定变量的位置是一个可怕的困惑[它可能驻留在不同的地方,具体取决于编译器当前是使用寄存器还是内存位置来存储它的值(value)等等]。

当然可以有一个宏来生成与参数中的名称匹配的字符串。

但是,对于配置类型的事物使用不同的机制可能更好 - 几个明显的选择是:

  1. 使用 std::map<std::string, std::string>
  2. 使用 std::pair<std::string, std::string> 的数组或 vector

您还可以使用一段固定代码来理解不同的配置设置及其对变量的转换。只要它们的数量不多,这根本不是一个糟糕的解决方案。

或者你可以像这样构建一个数组:

enum config_vals
{
host,
color,
...
max_config
};

struct translation
{
const char *name;
config_vals val;
};

#define TRANS(x) { #x, x }

translation trans[]] = {
TRANS(host),
TRANS(color),
};

class configitems
{
...
std::string value[max_configs];
...
}

...

configitems c;
...
if (c.value[host] == "localhost") ...

关于c++ - 将成员变量名转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550275/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com