C ++枚举重定义和C ++ 0x

时间:2011-08-09 07:13:14

标签: c++ enums c++11

如果我想排除枚举问题并在C ++中键入redefinition,我可以使用代码:

struct VertexType
{
    enum
    {
        Vector2 = 1,
        Vertor3 = 2,
        Vector4 = 3,
    };
};

struct Vector2 { ... };
struct Vector3 { ... };
struct Vector3 { ... };

有没有办法删除枚举上面的包装器。我查看了C ++ 0x但没有找到关于解决这个问题的附加信息。

3 个答案:

答案 0 :(得分:5)

由于您在谈论C ++ 0x,只需使用新的enum class语法:

enum class VertexType {
   Vector1 = 1,
   Vector2 = 2,
   Vector4 = 3
};

枚举器值只能通过VertexType中的VertexType::Vector1类型访问。

标准中的一些引用:

  

§7.2/ 2 [...] enum-keys枚举类和枚举结构在语义上是等价的;使用其中一个声明的枚举类型是作用域枚举,其枚举器是作用域枚举器。 [...]

     

§7.2/ 10 [...]每个范围的枚举器都在枚举范围内声明。[...]

// example in §7.2/10
enum class altitude { high=’h’, low=’l’ };
void h() {
  altitude a;        // OK
  a = high;          // error: high not in scope
  a = altitude::low; // OK
}

答案 1 :(得分:2)

namespace怎么样?

namespace VertexType
{
    enum V
    {
        Vector2 = 1,
        Vertor3 = 2,
        Vector4 = 3,
    };
}

struct Vector2 { ... };
struct Vector3 { ... };
struct Vector4 { ... };

答案 2 :(得分:2)

看来vector3已被使用。你可以做你想做的事情,但是,不能使用vector3。

enum //VertexType
{
    Vector2 = 1,
    //Vector3 = 2,
    Vector4 = 3,
};

struct Vector2 { ... };
//struct Vector3 {  };
struct Vector3 { ... };

这对我有用,完全没有错误。

这是我找到的链接。 http://www.kixor.net/dev/vector3/