касты из одного енума в другой
От: Brice Tribbiani Россия http://vzaguskin.github.io
Дата: 29.05.17 13:38
Оценка:
Привет,
Есть куча енумов в интерфейсе используемой библиотеки.
Интерфейс следующего слоя абстракции используют примерно эти же енумы, но под другими именами и слегка другими полями.

Требуются методы преобразования енумов каждого типа.

Ну, то есть:
typedef enum
{
    STATUS_OK,
    STATUS_WARNING,
    STATUS_ERROR,
    STATUS_ERROR2,
    STATUS_ERROR3,
}eLIBRARY_STATUS;

typedef enum
{
    PROGRAM_STATUS_OK,
    PROGRAM_STATUS_WARNING,
    PROGRAM_STATUS_ERROR,

}ePROGRAM_STATUS;

ePROGRAM_STATUS LibraryStatus2ProgramStatus(eLIBRARY_STATUS ls)
{
    switch (ls)
    {
        case STATUS_OK:
            return     PROGRAM_STATUS_OK;
        case STATUS_WARNING:
            return     PROGRAM_STATUS_WARNING;
        default:
            return PROGRAM_STATUS_ERROR;
    }
}


Так вот, не хочется создавать кучу функций вида LibraryStatus2ProgramStatus. Вместо этого хотелось бы чего-нибудь, типа перегрузки оператора присвоения или каста как функции — нечлена, аля
//жалко так нельзя
ePROGRAM_STATUS operator=(eLIBRARY_STATUS& from)
{
    //тут тело функции LibraryStatus2ProgramStatus
}

//и потом в коде:
eLIBRARY_STATUS lst;
ePROGRAM_STATUS pst;
pst = lst;

//ну или хотябы:
ePROGRAM_STATUS operator ePROGRAM_STATUS(eLIBRARY_STATUS)
{
    //тут тело функции LibraryStatus2ProgramStatus
}

//и потом в коде:
eLIBRARY_STATUS lst;
ePROGRAM_STATUS pst;
pst = (ePROGRAM_STATUS)lst; //чтобы тут не тупой каст инта в инт, а правильный.


А как это можно написать не по уродски?
хотел уже на боковую
папаху снял и сапоги
но в комментариях проснулись
враги
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.