是否可以将整个枚举集作为参数传递?

Bro*_*ias 3 c++ enums

我知道您可以使用枚举的一部分作为函数的参数。我的问题是你可以使用整个枚举作为参数吗?

对于枚举:

enum exampleEnum {ONE,TWO,THREE}
Run Code Online (Sandbox Code Playgroud)

通过部分枚举,我指的是:

function example(exampleEnum value){}

function example(ONE);
Run Code Online (Sandbox Code Playgroud)

按整个枚举是:

function example(enum value){}

function example(exampleEnum);
Run Code Online (Sandbox Code Playgroud)

我想我要问的是我可以像传递数组一样传递枚举。至少这就是我认为我要问的。

编辑

我试图实现的效果是在多个类和子类之间共享一个枚举,而无需在我希望使用它的每个类/子类中重新定义它。我希望传递这些值,而不是使用某种形式的全局变量。

编辑的编辑

更具体地说......我使用枚举值作为关联数组的一种形式。

enum attribute{STR,DEX,CON,INT,WIS,CHA};
short int charAttributes[6];

charAttributes[STR] = sumValue;
charAttributes[DEX] = sumValue;
charAttributes[CON] = sumValue;
charAttributes[INT] = sumValue;
charAttributes[WIS] = sumValue;
charAttributes[CHA] = sumValue;
Run Code Online (Sandbox Code Playgroud)

我想要的是传递枚举的整个名称、值以及作为参数传递的所有内容。我想传递枚举以保留枚举名称和值以继续使用它们。

Evg*_*yuk 5

exampleEnum 是一种类型,而不是值。C++ 将类型传递给函数的方法是使用模板:

#include <iostream>
#include <ostream>
#include <typeinfo>
using namespace std;

enum exampleEnum {ONE,TWO,THREE};

template<typename T>
void example()
{
    cout << typeid(T).name() << endl;
}

int main()
{
    example<exampleEnum>();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`typeid().name()` 不保证是 `"exampleEnum"`,并且其中可能包含其他特定于编译器的垃圾。您可能希望在打印之前对其进行一些过滤。 (2认同)