Привет,
Есть куча енумов в интерфейсе используемой библиотеки.
Интерфейс следующего слоя абстракции используют примерно эти же енумы, но под другими именами и слегка другими полями.
Требуются методы преобразования енумов каждого типа.
Ну, то есть:
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; //чтобы тут не тупой каст инта в инт, а правильный.
А как это можно написать не по уродски?