在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);
这可能吗?
答案 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