Оператор приведения к перегрузке между двумя перечислениями - PullRequest
8 голосов
/ 05 сентября 2011

Есть ли способ перегрузить оператор приведения для преобразования между двумя перечислениями?

В моем коде у меня есть

enum devStatus
{
    NOT_OPERATING,
    INITIALISING,
    DEGRADED,
    NORMAL
};

enum dataStatus
{
    UNAVAILABLE = 1,
    DEGRADED,
    NORMAL
}

, где NOT_OPERATING и INITIALISING отображаются в UNAVAILABLE;Деградированная и нормальная карта прямо напротив.Они фиксируются внешними интерфейсами.

Я ищу способ преобразования между devStatus и dataStatus и хотел бы написать что-то вроде:

devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;

Я знаю, что если бы это были классы,Я мог бы написать devStatus::operator dataStatus(), чтобы сделать это.Есть ли способ сделать это для перечислений?

Я мог бы просто иметь свободную функцию dataStatus devStatus2dataStatus(const devStatus& desSts)

1 Ответ

13 голосов
/ 05 сентября 2011

В C ++ операторы преобразования могут быть объявлены только в объявлениях класса, структуры и объединения.Они не могут быть объявлены вне типа (например, оператор +).Объявления типов enum не поддерживают элементы экземпляра, поэтому вам нужно использовать функцию преобразования.Это также сделает код вызова более понятным.Следующий пример демонстрирует это, используя настраиваемые пространства имен для области действия перечислений и функций преобразования:

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