Информация об изменениях

Сообщение Re[3]: Аналог scoped enum до C++11 от 04.06.2018 10:36

Изменено 04.06.2018 12:04 sergii.p

Re[3]: Аналог scoped enum до C++11
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Это будет заворачиванием в класс, в чем разница?


ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого

void printEnum(const MyEnum& en)
{
    std::cout << en.toString();
}


В случае с оборачиванием enum в struct. У нас каждый тип перечисления — скалярный тип, и надо писать что-то похожее на

void printEnum(const MyEnum& en)
{
    std::cout << MyEnum::convertToString(en);
}


конечно, дело вкуса, но мне первый вариант интуитивно понятнее. Хотя он и менее "в духе C++".
Re[3]: Аналог scoped enum до C++11
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Это будет заворачиванием в класс, в чем разница?


ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого

void printEnum(const MyEnum& en)
{
    std::cout << en.toString();
}


В случае с оборачиванием enum в struct. У нас каждый тип перечисления — скалярный тип, и надо писать что-то похожее на

void printEnum(const MyEnum& en)
{
    std::cout << MyEnum::convertToString(en);
}


конечно, дело вкуса, но мне первый вариант интуитивно понятнее. Хотя он и менее "в духе C++".

update: кстати, в такой ситуации очень легко запретить неявное преобразование в int и обратно. Можно переопределить operator| operator& для масок. В общем, чисто явовский подход: всё запретить, а потом долго мучиться, чтобы хоть что-то разрешить