Блок пространства имен перечисления класса C ++ 11 - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть enum class в C ++ 11:

enum class eDays{ SUNDAY, MONDAY, /*...*/ };

enum class устанавливает пространство имен для значений, поэтому его следует использовать следующим образом:

eDays::SUNDAY

Я хочу установить блок пространства имен, чтобы мне не приходилось каждый раз указывать пространство имен, например:

namespace eDays {
    vector<eDays> vec = { MONDAY, SUNDAY, /*...*/ };
}

Вместо:

vector<eDays> vec = { eDays::MONDAY, eDays::SUNDAY, /*...*/ };

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 декабря 2018

С классами enum вы не можете.

Как сказал Бенджамин Барруа: «Класс enum работает как класс, поэтому eDays - это не пространство имен, а имя класса»; использование директив может не применяться.

Если вы хотите написать следующее, есть другие решения.

std::vector<eDays> vec = { Monday, Tuesday, /*...*/  };

Фактическое пространство имен + enum

namespace eDays
{
    enum t { Monday, Tuesday, /*...*/ };
}

Фактическое пространство имен + (статические) константы

namespace eDays
{
    static const int Monday  = 0;
    static const int Tuesday = 1;
    // ...
}

Оба позволят вам написать:

{
    using namespace eDays;
    std::vector<int> vec = { Monday, Tuesday, /*...*/  }; // or <t>
}
...