c++ - 您如何将所有枚举常量纳入范围?

标签 c++

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

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
}

最佳答案

// 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 是一个 intyou can't implicitly convert an int to an 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; 
}

关于c++ - 您如何将所有枚举常量纳入范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70142196/

相关文章:

c++ - 在 c header 中使用来自 c++ header 的枚举类

C++11 is_pod 与 GCC 4.6

c++ - 为什么QT的iOS组件占用那么大的磁盘空间?

c++ - 尝试提取不是结构的值的组成部分。 C++

c++ - 避免 `const X&` 和 `X&` 的两个版本的函数

c++ - 使用外部 *.lib 文件进行 Qt 部署

c++ - 如何在 MacOS 上的 C++ 计算中使用双 AMD FirePro D300 的 GPU?

C++ - 确定 const char* 是否指向字符串文字或动态对象

c++ - 与 Boost 日志的交叉编译链接期间未解析的符号

c++ - clangd-14 找不到 C++ header