【发布时间】:2021-10-27 05:04:55
【问题描述】:
enum class A
{
type_a,
type_b
};
#define name(a) #a
int main()
{
cout << name(A::type_a) << endl;
}
我可以像上面一样输出'enum class'变量'name(输出'A::type_a',因为它比它的值更容易理解)。但是如果我把输出放在一个函数中并使用'A: :type_a' 作为它的输入变量,如下所示,'enum class' 变量'name 将只输出输入变量的名称(输出'a' 而不是'A::type_a')。
void func(A a)
{
cout << name(a) << endl;
}
int main()
{
func(A::type_a);
}
虽然我可以使用“switch case”来列出枚举的每个名称,但是有没有更好的方法可以让我在添加或删除枚举中的任何项目时也不会修改输出函数。
【问题讨论】:
-
您的宏只返回作为字符串输入的任何内容。如果你写
name(asdf),它只会返回asdf。 -
C++ 没有type introspection。如果不将枚举实际映射到代码中的字符串,就不可能做你想做的事。
-
你可以使用下面的某种hack代码 switch(a) { case type_a: cout
-
@soumyasambitKunda 但是当我添加或删除枚举中的任何项目时,我必须同时更改“切换”代码。很不方便也很容易出错
-
@f1msch 问题是你为什么要首先这样做。