Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以将枚举注入到类的作用域/命名空间中?_C++_C++11_Enums_Typedef_Using - Fatal编程技术网

C++ 是否可以将枚举注入到类的作用域/命名空间中?

C++ 是否可以将枚举注入到类的作用域/命名空间中?,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

使用enum
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
,这在功能上没有什么区别。我猜程序何时运行它会占用更多一点内存,但我肯定能接受。