标题说明了所有内容,但我在此处举例说明:
class A {
public:
enum A
{
enumVal1,
enumVal2
};
enum B
{
enumVal1,
enumVal3,
};
};
我必须怎么做才能使它起作用?
提前致谢。
最佳答案
C++ 11具有范围内的枚举:
class S {
public:
enum class A
{
enumVal1,
enumVal2
};
enum class B
{
enumVal1,
enumVal3,
};
};
然后,您需要引用
A::enumVal1
和B::enumVal1
。即使没有歧义,enumVal2
也必须合格。而且,枚举数不会像旧样式那样隐式地与int
相互转换。您需要一个static_cast
。这只是在验证C++ 03惯用语:
class S {
public:
struct A { enum type
{
enumVal1,
enumVal2
} value; };
struct B { enum type
{
enumVal1,
enumVal3,
} value; };
};
然后,您需要声明
A::type
和B::type
类型的对象,或者引用.value
的struct A
成员。 (其他方法也是可能的。)