gpt4 book ai didi

c++ - (如何)我可以在 C++ 中使用字符串数组作为标识符?

转载 作者:行者123 更新时间:2023-11-30 00:50:32 26 4
gpt4 key购买 nike

我正在处理这个项目,我需要解析一个文本文件,该文件包含一个两列表,左边是名称,右边是值。

现在,我需要将它们写入控制表中的特定位置,这些位置使用十六进制地址进行标识;在我无法编辑的头文件中,它们被定义为:

#define HARRY_POTTER 0x3A

然后有一个写入函数,它获取一个地址和一个值并将其写入一个存储位置(这个函数也是我无法控制的)。所以,调用这个

write(0x3A, 7);

与调用此函数的结果相同

write(HARRY_POTTER, 7);

因为头文件中的那个定义。

现在,我已经进行了解析,它基本上为我提供了左列的名称,作为字符串(例如,“HARRY_POTTER”),以及右列的值,作为整数。

我想知道是否有任何方法可以使用这个字符串“HARRY_POTTER”作为写入函数中的标识符;本质上是将字符串转换为标识符,这样我就可以遍历整个解析值数组,它会自动将它们写入与字符串匹配的地址/左列中的名称。

这可能吗?如果是,如何?

最佳答案

不,你问的不可能。原因是因为您从文件中读取的字符串仅在运行时已知,而预处理发生在编译时,因此 HARRY_POTTER 必须已被替换。事实上,程序编译后根本不存在任何标识符。

您可能希望它引入从 std::string 到您定义的常量的映射。例如:

std::unordered_map<std::string, int> mapping = {{"HARRY_POTTER", HARRY_POTTER},
{"RON_WEASLEY", RON_WEASLEY}};

当然,常量将在编译时被替换,所以这相当于:

std::unordered_map<std::string, int> mapping = {{"HARRY_POTTER", 0x3A},
{"RON_WEASLEY", 0x7C}};

然后你可以调用write:

write(mapping.at(key), 7);

其中 key 是一个字符串,其值类似于 "HARRY_POTTER"

关于c++ - (如何)我可以在 C++ 中使用字符串数组作为标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698308/

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