Reputation: 742
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
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, /*...*/ };
enum
namespace eDays
{
enum t { Monday, Tuesday, /*...*/ };
}
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