Цитата(hoz @ 22.9.2014, 14:58 ) | | перечисление может быть любого типа... |
перечисление типа не имеет (оно само есть тип), но неявно приводится к целочисленным. обратное преобразование должно быть явным. в с++11 появились строго типизированные enum class, которые неявно не приводятся, и можно указать размер (конкретный целочисленный тип). были предложения расширить на double, но не вошло.
кстати можно устроить специфическое перечисление времени компиляции без возможности даже явного приведения к целым, что используется например в категориях итераторов stl, упрощенно вроде
| Код | struct iterator_tag {}; struct input_iterator_tag : iterator_tag {}; struct forward_iterator_tag : input_iterator_tag {}; struct bidirectional_iterator_tag : forward_iterator_tag {}; struct random_iterator_tag : bidirectional_iterator_tag {}; struct output_iterator_tag : iterator_tag {}; // ... template <typename Iterator> void reverse_impl (Iterator begin, Iterator end, forward_iterator_tag) {...} template <typename Iterator> void reverse_impl (Iterator begin, Iterator end, random_iterator_tag) {...}
template <typename Iterator> void reverse (Iterator begin, Iterator end) { reverse_impl (begin, end, iterator_category(begin)); }
|
|