Переопределение перечисления C ++ и C ++ 0x - PullRequest
0 голосов
/ 09 августа 2011

Если я хочу исключить проблемы с перечислениями и переопределением типов в C ++, я могу использовать код:

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

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

Есть ли способ удалить обертку над перечислением. Я посмотрел на C ++ 0x, но не нашел дополнительной информации о решении этой проблемы.

Ответы [ 3 ]

5 голосов
/ 09 августа 2011

Поскольку вы говорите о C ++ 0x, просто используйте новый синтаксис enum class:

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

Значения перечислителя будут доступны только через тип VertexType, как в VertexType::Vector1.

Некоторые цитаты из стандарта:

§7.2 / 2 [...] enum-класс enum-keys и enum-структура семантически эквивалентны; тип перечисления, объявленный с одним из них, является перечислением области, и его перечислители являются перечислителями области. [...]

§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
}
2 голосов
/ 09 августа 2011

Похоже, что vector3 уже используется.Вы можете делать то, что пытаетесь сделать, однако, vector3 не может быть использован.

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

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

Это работает для меня, никаких ошибок вообще.

Это ссылка, которую я нашел.http://www.kixor.net/dev/vector3/

2 голосов
/ 09 августа 2011

Как насчет namespace?

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

struct Vector2 { ... };
struct Vector3 { ... };
struct Vector4 { ... };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...