代码之家  ›  专栏  ›  技术社区  ›  Qix - MONICA WAS MISTREATED

如何将所有枚举常量引入作用域?

c++
  •  2
  • Qix - MONICA WAS MISTREATED  · 技术社区  · 4 年前

    有没有办法把所有的枚举 常数 进入范围?我不是指类型,我是指常数本身。

    struct Foo {
        enum Bar {
            A = 1, B = 2, C = 4, D = 8
        };
    };
    
    int main() {
        using E = Foo;
        Foo::Bar v = E::A | E::B | E::C | E::D;
    
        // But is it possible to instead do...
        using Foo::Bar::*; // (not real C++)
        Foo::Bar v = A|B|C|D; // <-- all enum constants are brought into scope
    }
    
    1 回复  |  直到 4 年前
        1
  •  5
  •   Fureeish    4 年前
    // This already works, of course.
    using E = Foo;
    Foo::Bar v = E::A | E::B | E::C | E::D;
    

    嗯,不是真的,因为 E::A | E::B | E::C | E::D 是一个 int you can't implicitly convert an int to an enum .

    但这并不能阻止你使用 using enum

    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; 
    }