gpt4 book ai didi

c++ - 将键值表示为枚举

转载 作者:行者123 更新时间:2023-11-28 04:28:56 24 4
gpt4 key购买 nike

我正在从配置文件中读取一个值:

txtype=value

value 可以是以下四个值之一:transmit、receiver、transceiver、any。有很多现有代码可用于从文件中读取键值对,因此我只需将其表示为一种类型即可。

我想将其表示为一个枚举:

 enum txtype { transmit = "transmit", receiver = "receiver", transceiver = "transceiver", any = "any" }

但我现在意识到我不能用 c++ 98 做到这一点。在 c++ 98 中有没有其他方法可以做到这一点?

最佳答案

这实际上取决于您的编译器将支持什么。如果你的编译器支持 map , 然后你可以简单地创建一个 map在字符串和整数索引之间,您可以将其分配为 enum使用 std::map<std::string, int> 的值. enum下面省略了,因为您可以定义和声明一个实例来分配您喜欢的返回索引。使用 map 的简短示例可能是,例如

#include <iostream>
#include <string>
#include <map>

int main (void) {

std::map<std::string, int> m = {
{"transmit", 0},
{"receiver", 1},
{"transceiver", 2},
{"any", 3}
};
std::string s;

while ((std::cin >> s))
std::cout << s << " - " << m[s] << '\n';
}

(注意:如果您使用的是 Visual C++ 12 或更早版本,则不能使用 {...} 通用初始化程序)

示例使用/输出

$ printf "receiver\ntransceiver\nany\ntransmit\n" | ./bin/map_str_int
receiver - 1
transceiver - 2
any - 3
transmit - 0

如果你的编译器不支持map , 你可以使用 std::string 做同样的事情和一个简单的函数来比较 std::string 数组的内容返回匹配类型的索引,例如

#include <iostream>
#include <string>

const std::string txstr[] = { "transmit",
"receiver",
"transceiver",
"any" };

const int ntypes = sizeof txstr / sizeof *txstr;

int gettxtype (const std::string& s)
{
int i;

for (i = 0; i < ntypes; i++)
if (txstr[i] == s)
return i;

return -1;
}

int main (void) {

std::string s;

while ((std::cin >> s)) {
int type = gettxtype(s);
if (type >= 0)
std::cout << s << " - " << type << '\n';
}
}

(作为上述好处,如果未找到匹配类型,您可以通过返回 -1 来确定提供的类型是否与任何已知的 txtypes 不匹配。)

使用/输出相同。查看所有内容,如果您还有其他问题,请告诉我。

关于c++ - 将键值表示为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53492349/

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