C++ 是否可以将枚举注入到类的作用域/命名空间中?
使用enumC++ 是否可以将枚举注入到类的作用域/命名空间中?,c++,c++11,enums,typedef,using,C++,C++11,Enums,Typedef,Using,使用enumFoo::Values和位于Foo之外的类Bar,我可以在不重新定义类型的情况下将enum的所有值注入类范围吗 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
Foo::Values
和位于Foo
之外的类Bar
,我可以在不重新定义类型的情况下将enum的所有值注入类范围吗
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);
Foo::Values val=Bar::zero;
断言(std::is_same::value);
这可能吗?这样:
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;
}
#包括
#包括
名称空间Foo{
枚举值{0,1,2};
}
结构条{
使用Values=Foo::Values;
静态constexpr值为零=Foo::零;
静态constexpr值one=Foo::one;
静态constexpr值2=Foo::2;
};
int main(){
Foo::Values val=Bar::零;
std::cout如果您将其更改为作用域枚举,那么类型定义将执行您想要的操作。我知道,但我不想在这种情况下使用作用域枚举。完美的解决方案。VS2013还不支持constepr
,所以我只使用了const
,这在功能上没有什么区别。我猜程序何时运行它会占用更多一点内存,但我肯定能接受。