是否可以将枚举注入类范围/命名空间?

时间:2014-10-23 14:51:38

标签: c++ c++11 enums typedef using

Foo::Values之外使用枚举Bar和类Foo,我可以将所有枚举值注入类范围而无需重新定义类型吗?

namespace Foo{
    enum Values{
        zero, one, two
    };
}

struct Bar{
    typedef Foo::Values Values; //Doesn't work, but is what I'd like to do
    using Foo::Values;          //Or this
}

这些是有效的:

Foo::Values val = Bar::zero;
assert(std::is_same<Foo::Values, Bar::Values>::value);

这可能吗?

1 个答案:

答案 0 :(得分:2)

这样:

using Values = Foo::Values;

只能逐个提取值:

static constexpr Values zero = Foo::zero;
static constexpr Values one = Foo::one;
static constexpr Values two = Foo::two;

检查:

#include <iostream>
#include <type_traits>

namespace Foo {
    enum Values { zero, one, two };
}

struct Bar {
    using Values = Foo::Values;
    static constexpr Values zero = Foo::zero;
    static constexpr Values one = Foo::one;
    static constexpr Values two = Foo::two;
};

int main() {
    Foo::Values val = Bar::zero;
    std::cout << std::is_same<Foo::Values, Bar::Values>::value;
}

输出:

  

1