Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cast enum class 
V
    Опции темы
boostcoder
Дата 30.11.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



всем привет.

enum class из с++11 конечно, замечательная вещь.
но я уперся в способ сериализации/десериализации оных.

скажите, стандарт предусматривает что-то вроде enum_cast<>() ? или же, как быть?

спасибо.

PM WWW   Вверх
mes
Дата 30.11.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  30.11.2011,  16:27 Найти цитируемый пост)
скажите, стандарт предусматривает что-то вроде enum_cast<>() ? или же, как быть?

а что должен делать такой каст ? чем static_cast не подходит ? 
или же как быть с чем ? проблема не освещена.. 




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 30.11.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



mes, Вы правы.
я затупил с тем, что сразу попробовал reinterpret_cast применить, но компилятор не дал. и я на автомате подумал что static_cast тем более не позволит. и ошибся.
Код

#include <iostream>

enum class type: unsigned char {
   var1,
   var2
};

int main() {
   type t1 = type::var2, t2;
   int i = 0;
   
   i = static_cast<int>(t1);
   std::cout << i << std::endl;

   t2 = static_cast<type>(i);
   std::cout << (t1==t2) << std::endl;
}


http://liveworkspace.org/code/2f71fc4a2648...ce300f710498701

спасибо. вопрос закрт.
PM WWW   Вверх
mes
Дата 30.11.2011, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  30.11.2011,  16:38 Найти цитируемый пост)
сразу попробовал reinterpret_cast применить, но компилятор не дал. и я на автомате подумал что static_cast тем более не позволит

логика конечно железная  smile  такого хода мыслей не ожидал  smile 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 1.12.2011, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



mes, а не подскажите-ли по такому делу ;)
есть у меня специализации, к примеру, для следующих типов: char, uchar, int, uint
и есть enum class`ы такие: enum class e1: char {}; enum class e2: uchar {}; enum class e3: int {}; enum class e4: uint {};

каким образом можно заставить специализацию для char принимать e1, а специализацию для uchar принимать e2, и т.д.. ?

Это сообщение отредактировал(а) boostcoder - 1.12.2011, 01:21
PM WWW   Вверх
bsa
Дата 1.12.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



boostcoder, static_cast<char>(e1::var1), это ты хотел?
PM   Вверх
boostcoder
Дата 1.12.2011, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



bsa, ну и чтож мне, каждый раз при использовании enum class писать статик каст? а когда я не знаю что за тип(в шаблоне к примеру), кто статик каст вписывать будет?
вопрос -
Цитата(boostcoder @  1.12.2011,  01:13 Найти цитируемый пост)
каким образом можно заставить специализацию для char принимать e1, а специализацию для uchar принимать e2, и т.д.. ?


PM WWW   Вверх
bsa
Дата 1.12.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



boostcoder, сделай еще специализации для enum class xx... Ты какие-то странные пытаешься вещи делать с перечислением, которое специально было максимально ограничено в правах на конвертацию... Мне лично непонятно, зачем вообще этот тип сериализовать. На мой взгляд, основное применение должно быть исключительно внутри программы без выхода наружу (в raw виде, конечно).
PM   Вверх
boostcoder
Дата 1.12.2011, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(bsa @  1.12.2011,  10:14 Найти цитируемый пост)
сделай еще специализации для enum class xx...

что, для каждого задекларенного мною енума? оО

PM WWW   Вверх
bsa
Дата 1.12.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(boostcoder @  1.12.2011,  16:12 Найти цитируемый пост)
что, для каждого задекларенного мною енума?

да!
Тебя же не возмущает необходимость писать функцию сериализации для каждого своего класса. Так же и с этими инумами. Они специально созданы для того, чтобы они не конвертировались автоматически.
PM   Вверх
boostcoder
Дата 1.12.2011, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



в общем, получилось.
сделал специализацию для is_enum и is_not_convertible. ибо для обычного енума истинными являются is_enum и is_convertible. и никаких руковписываний кастов.

всем спасибо.

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.