如何将所有枚举常量纳入范围?

Qix*_*Qix 3 c++

有没有办法将所有枚举常量纳入范围?我指的不是类型,而是常量本身。

struct Foo {
    enum Bar {
        A = 1, B = 2, C = 4, D = 8
    };
};

int main() {
    using E = Foo;
    int v = E::A | E::B | E::C | E::D;

    // But is it possible to instead do...
    using Foo::Bar::*; // (not real C++)
    int v = A|B|C|D; // <-- all enum constants are brought into scope
}
Run Code Online (Sandbox Code Playgroud)

Fur*_*ish 8

// This already works, of course.
using E = Foo;
Foo::Bar v = E::A | E::B | E::C | E::D;
Run Code Online (Sandbox Code Playgroud)

嗯,不是真的,因为E::A | E::B | E::C | E::D是 anint并且您不能将 an 隐式转换int为 anenum

但这并不能阻止您使用using enum除非您不能使用 C++20):

struct Foo {
    enum Bar {
        A = 1, B = 2, C = 4, D = 8
    };
};

int main() {
    using enum Foo::Bar; // (real C++20!)
    Foo::Bar v = D; 
}
Run Code Online (Sandbox Code Playgroud)