将匿名枚举作为函数参数传递

时间:2018-09-10 08:35:16

标签: c++11 enums

是否可以将匿名枚举作为函数参数传递?像这样:

class Foo
{
    enum
    {
        One,
        Two,
        Three
    };
};

void Function( /* ??? */ e)
{
    switch (e)
    {
        case Foo::One: // do stuff...
        case Foo::Two: // ...
    }
}

解决方案尝试:

我试图通过使用auto并检查推断出的类型来确定Foo :: One的类型是什么

auto u = Foo::One;

但是事实证明它是Foo<anonymous enum>,所以我不能真正在代码中使用它。

2 个答案:

答案 0 :(得分:2)

我找到了可能的解决方案。丑陋,但可行:

void Function(decltype(Foo::One) e) {}

答案 1 :(得分:2)

您可以将功能转换为如下功能模板:

template <class Enum> void Function(Enum e)
{
    switch (e)
    {
        case Foo::One: // do stuff...
        case Foo::Two: // ...
    }
}

可以实例化并通过

调用
Function(Foo::One);