Как написать оператор using для классов enum?

В программе «камень, бумага, ножницы», которую я пишу, я перечисляю три различных движения и объявляю их как класс. Однако, когда я пытаюсь написать оператор using, чтобы избежать использования оператора области видимости, он, похоже, не работает. Кто-нибудь знает почему?

enum class choice {rock, paper, scissors};

using namespace choice;

Здесь появляется сообщение об ошибке: [выбор] ‘выбор’ не является именем пространства имен.
Почему это? Я думал, что для выбора может быть пространство имен, в этом контексте.

4

Решение

Желаемое поведение может быть достигнуто с помощью namespace choice { enum choice { ... }; }, Это будет работать только для значений, вы все равно должны использовать choice::choice если вы хотите объявить переменную. Если вы также не используете auto, конечно.

1

Другие решения

choice не пространство имен, так using namespace choice; не действителен Если вы не хотите использовать указатель области видимости, не используйте перечисление с областью видимости. Простое перечисление будет работать для того, что вы упомянули до сих пор:

enum choice { rock, paper, scissors };
0

enum class choice {rock, paper, scissors}
rock = choice::rock, paper = choice::paper, scissors = choice::scissors;
0

Если как показано ниже, я просто использую «typedef A :: B :: C C».

namespace A
{
class B
{
public:
enum class C : unsigned char
{
Something
};
};
}
0

: /

namespace choice
{
enum class type {rock, paper, scissors};
constexpr auto rock     = type::rock    ;
constexpr auto paper    = type::paper   ;
constexpr auto scissors = type::scissors;
}

int main()
{
choice::type move;
using namespace choice;
move = rock;
move = paper;
move = scissors;

return 0;
}

-__-

0
По вопросам рекламы [email protected]