Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перегрузка оператора для enum


Автор: iff 29.10.2014, 01:10
Код

enum tIcon:tNumber {ICON_MALE = 0, ICON_FEMALE = 1, ICON_NONE = 2};
struct tUser {
    tText Login;
    tText IP;
    tIcon Icon;
};

cPacket& cPacket::operator>> (tNumber &Data) {
    ...
    return *this;
};

cPacket& cPacket::operator>> (tUser &Data) {
    return *this >> Data.Login >> Data.IP >> Data.Icon;
};

Собственно в последней строчке ошибка 
Цитата

бинарный ">>": не найден оператор, принимающий правый операнд типа "tNumber" (или приемлемое преобразование отсутствует)

Если писать tNumber(Data.Icon)  или static_cast<tNumber>(Data.Icon) - не помогает.
enum всё таки перечислимый тип или только набор констант... 
Если Icon объявить не tIcon, а tNumber - то всё ок, но хотелось бы указывать тип значения. Можно ли как-то это сделать?

Автор: Earnest 29.10.2014, 08:55
Ну вы же написали свой оператор  >> для tNumber. Сделайте то же самое для tIcon.
Но вообще, если честно, не вижу ни малейшего смысла. Смахивает на пример из учебника. Я всегда сериализую перечисления как целые типы (с явным преобразованием). В реальных приложениях и без этой фигни мороки хватает.

Автор: iff 29.10.2014, 17:50
Цитата(Earnest @  29.10.2014,  08:55 Найти цитируемый пост)
Я всегда сериализую перечисления как целые типы (с явным преобразованием)

Что под этим имеется ввиду? (можно пример?) 
Думал что достаточно объявить "enum tIcon:tNumber" и компилятор поймет.
Пока что предполагаю всё объявлять просто как tNumber, а перечисления оставлять без имени: enum { ... }

Автор: Earnest 30.10.2014, 08:05
Да как-то так:
Код

enum EType { A, B, C };
...
EType type = A;
...
out << (int)type;
...
int tmp;
in >> tmp;
type = (EType)tmp;

Конструкцию enum tIcon:tNumber вообще не очень поняла - это типа наследование ?
И если не секрет, зачем вам свой тип tNumber? А также tText? Чем встроенные\стандартные не угодили?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)