我可以使用宏将std::tring转换为对应的枚举吗?

Can I Use Macros To Convert std::tring To Corresponding Enum?

我正在尝试 return 基于字符串值的枚举(字符串来自 json 文件,如果重要的话) 基本上,在代码中我会写 enumName::MyName 的地方,我希望能够有类似

的东西
std::string name = "MyName";
return enumName::name; // this gets converted to enumName::MyName

显然这是不正确的语法。我想到了使用宏来解决我的问题,所以这是我目前的尝试:

#define stringToName(n) enumName::##n

我在哪里使用了 ## 标记粘贴运算符。但在那种情况下,n 在被复制之前不会被评估,所以下面的事情会发生

return stringToName("MyName");
//which becomes
return enumName::"MyName";

std::string name = "MyName";
return stringToName(name);
//which becomes
return enumName::name;

这不是我想要的。有没有办法让它工作? (理想情况下不必在字典或类似的东西中手动编写每个枚举名称)

最后,我找到了使用 Jerry 链接的问题中提到的 magic_enum 库的解决方案。我不完全理解 how/why 它还可以工作,但它很干净并且可以完成工作。