C ++ 11: как правильно перейти от перечисления старого стиля к классу перечисления? - PullRequest
3 голосов
/ 24 октября 2011

В настоящее время я переносю свой код из перечисления старого стиля в класс перечисления.

Строгая типизация хороша, но я натолкнулся на то, что в коде мне нужно было вызвать функцию init_pair () ncurses, которая принимает short int в качестве первого аргумента, но которую я преобразовал в класс enum для удобное для разработчиков чтение.

Чтобы сделать компилятор счастливым, мне кажется, что мне нужно использовать static_cast<short int>() для первого параметра.

Есть ли более чистый подход или если я должен использовать static_cast, как вы рекомендуете его использовать?

Принятый ответ : Ответ Криса Додда хорош. До перехода у меня были повсюду целые числа, представляющие перечисления старого стиля. После переключения у меня есть одно грязное приведение с типобезопасными перечислениями во всем остальном коде. Грязность изолирована в одном месте, код безопаснее, и его легче читать. Это заметное улучшение.

Ответы [ 2 ]

7 голосов
/ 24 октября 2011

Самый простой способ, вероятно, состоит в том, чтобы определить перегруженную встроенную версию init_pair, которая принимает перечисление и вызывает его для вызова нормальной версии:

inline int init_pair(enum_type pair, short f, short b) {
    return init_pair(static_cast<short>(pair), f, b);
}

Таким образом, пользователи могут вызывать его, используя тип перечисления ибудет просто работать

3 голосов
/ 24 октября 2011

Есть ли более чистый способ сделать это или static_cast в порядке?

Очиститель?Вы делаете что-то нечистое: берете строго типизированное значение и меняете его на другой тип.Вы сознательно обходите систему типов.Когда вы делаете что-то нечистое, оно должно выглядеть нечистым.

Единственный «более чистый» способ сделать это с использованием C-стиля.И я не уверен, что это «чище».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...