реклама на сайте
подробности

 
 
> enum в С++, как определить неявное преобразование одного enum к другому?
Сергей Борщ
сообщение Jan 26 2007, 18:55
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



задача в следующем:
Код
enum command_t {CMD1, CMD2, CMD3 };
enum device1_cmd {CMD4 = CMD3, CMD5, CMD6};
enum device2_cmd {CMD7 = CMD3, CMD8, CMD9};
т.е. есть некий общий набор команд и его расширения специфичные для разных устройств.
Теперь если я пытаюсь сделать
device1_cmd = CMD9;
то получаю ошибку a value of type "device2_cmd" cannot be used to initialize an entity of type "device1_cmd". Что правильно, и ради этого все enum и затевались.
но такую же ошибку я получаю и на
device1_cmd = CMD1;
а вот этого не хочется. Т.е. хочется объявить оператор неявного преобразования из command_t в device1_cmd. Как это сделать?

P.S. явное преобразование не хочется потому что можно случайно преобразовать совсем не то, что нужно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jan 26 2007, 20:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Ну это ведь действительно в плюсах определения ТИПОВ.

Цитата(Сергей Борщ @ Jan 26 2007, 17:55) *
device1_cmd = CMD1;


Код
device1_cmd aaaa;
......
device1_cmd aaaa = (device1_cmd)CMD1;

По идее должно работать, хотя насколько мне помнится, никаких официальных требований к возможности такого преобразования не накладывается - посему, как "повезет".
Вообще это извращение enum. Для "красоты" (device1_cmd)CMD1 можно в макросик замаскировать.
А уж "НЕЯВНОЕ ПРЕОБРАЗОВАНИЕ" ни в какие ворота не лезет - не будет такого.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016