Сообщение Re[3]: Аналог scoped enum до C++11 от 04.06.2018 10:36
Изменено 04.06.2018 12:04 sergii.p
Re[3]: Аналог scoped enum до C++11
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Это будет заворачиванием в класс, в чем разница?
ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого
В случае с оборачиванием enum в struct. У нас каждый тип перечисления — скалярный тип, и надо писать что-то похожее на
конечно, дело вкуса, но мне первый вариант интуитивно понятнее. Хотя он и менее "в духе C++".
ЕМ>Это будет заворачиванием в класс, в чем разница?
ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого
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
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Это будет заворачиванием в класс, в чем разница?
ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого
В случае с оборачиванием enum в struct. У нас каждый тип перечисления — скалярный тип, и надо писать что-то похожее на
конечно, дело вкуса, но мне первый вариант интуитивно понятнее. Хотя он и менее "в духе C++".
update: кстати, в такой ситуации очень легко запретить неявное преобразование в int и обратно. Можно переопределить operator| operator& для масок. В общем, чисто явовский подход: всё запретить, а потом долго мучиться, чтобы хоть что-то разрешить
ЕМ>Это будет заворачиванием в класс, в чем разница?
ну как же? Разница в том, что каждый элемент перечисления — это объект, а не скалярный тип. Можно написать типа такого
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& для масок. В общем, чисто явовский подход: всё запретить, а потом долго мучиться, чтобы хоть что-то разрешить