0

I have an enum class in C++11:

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

The enum class sets the namespace for the values so it has to be used like:

eDays::SUNDAY

I want to set an namespace block so I won't need to specify the namespace each time something like:

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

Instead of:

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

What am I missing?

igor
  • 716
  • 1
  • 9
  • 27
  • 6
    Why don't you just use an enum instead of an enum class? An enum class works like a class so `eDays` is not a namespace but a class name, and you just can't not mention the class name to use its static members. – Benjamin Barrois Dec 26 '18 at 07:55

1 Answers1

5

With enum classes, you cannot.

As Benjamin Barrois put it, "An enum class works like a class so eDays is not a namespace but a class name"; using directives may not apply.

If you want to be able to write the following, there are other solutions.

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

Actual namespace + enum

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

Actual namespace + (static) constants

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

Both will let you write:

{
    using namespace eDays;
    std::vector<int> vec = { Monday, Tuesday, /*...*/  }; // or <t>
}
YSC
  • 38,212
  • 9
  • 96
  • 149