![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| HMLd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 27.6.2006 Где: Polska Репутация: 1 Всего: 0 |
Можно ли с помощью typedef аль чего другого создать пользовательский тип данных? Например, если мне нужен тип, переменные которого могут принимать только 1 или 0. Можно, конечно, заюзать bool, но тчо делать, если надо, чтобы диапозон значений был до 3 и т.д.?
В общем, если можно, то как? А то вроде typedef только для переопределения встронных типов, если не ошибаюсь... |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
|
|||
|
||||
| HMLd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 27.6.2006 Где: Polska Репутация: 1 Всего: 0 |
Так это ж будет просто константное перечисление, разве нет?
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
HMLd, ты хочешь RTTI (Run Time Type Information) использовать? Если нет - то enum - это то что тебе нужно. Если да то
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Можно, конечно, но только не с помощью typedef, а с помощью определения класса.
Например:
Можно вместо исключения присваивать стандартное значение или делать что-то еще, в зависимости от задачи. Можно прописать арифметические операторы, и т.д. -------------------- ... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Earnest, не уверен, но этот вариант настораживает. Неявное приведение (как туда так и обратно) явно может дать побочные эффекты. Надо проверить.
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Допустим, у тебя есть функция принимающая твой ограниченный инт. Возможно ты хотел бы также написать версию для обычного инта (мож для конкретной функции какие-то преобразования можно сделать), но пока этого не сделал. В итоге нормально сработает экзепшен.
В достаточно сложном контексте (с несколькими операциями и невными преобразованиями) каое-то значение может проскочить не туда куда надо. |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
IMHO, если для такого типа не предполагается наличие слишком замороченных операций, то вполне сгодится и enum. Как-никак, это тоже будет пользовательский тип, для которого можно перегрузить нужные операторы. Что касается исключений, то для них можно и отдельную функцию с проверкой сделать:
Это сообщение отредактировал(а) UnrealMan - 16.12.2006, 11:49 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 15.12.2006, 16:28 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
А мы тогда отменим неявное приобразование explicit'том. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
MAKCim, в данном случае - да.
А если до другого значения? 5, 7, 23895? Тогда уже так не сработает. Все-таки наиболее полно написала Earnest. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Какие-то недостоверные у тебя знания в последнее время пошли, однако. Глобальные операторы для перечислений перегружаются так же, как и для классов. Конечно, некоторые операторы, которые могут быть членами класса, нельзя определить глобальными, но в данном случае такие операторы наверняка излишни. Кроме того, enum больше походит на int, т.к. его преобразование к целому не пользовательское. Также не будем забывать, что перечисление является POD-типом, что даёт право обращаться с ним более вольно, чем с вышеприведённым классом. В частности, можно создавать объединения (что неприемлемо для классов с конструкторами). Возможно, это не кажется столь уж полезным, но всё же... Это сообщение отредактировал(а) UnrealMan - 16.12.2006, 11:54 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |