igor
igor

Reputation: 742

C++11 enum class namespace block

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?

Upvotes: 0

Views: 181

Answers (1)

YSC
YSC

Reputation: 40070

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>
}

Upvotes: 5

Related Questions