Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дополнение перечисления


Страницы:   1 2

Kolan ©   (2009-03-16 11:32:00) 

Здравствуйте!

У меня есть набор команд, которые закодированы числами. Часть команд является базовой, а часть может изменяться. Я бы хотел описать в одном модуле перечисление с базовым набором команд, а в других модулях иметь возможность расширять его.

Примерно так:

base.pas

TCommandTypes =
 (
   mtDeviceError = $FF,
   mtVersionInfoRequest = $00,
   mtVersionInfoAnswer = $80,  
 );



special.pas

TCommandTypes =
 (
   mtOperationModeRequest = $01,
   mtOperationModeAnswer = $81,
   mtImpedanceMeasurmentStartRequest = $02,
   mtMeasurmentStartAnswer = $82,
...
 );


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

Понятно, что если я поступлю так как в примере, то базовый набор команд будет просто закрыти ничего не получится.

Как можно добиться желаемого?


Kolan   (2009-03-16 12:59:00) [21]

Palladin, отлично! Проверки типа нет, но подсказка при вызове функции выводится вполне понятная. Я думаю путаницы не возникнет, поэтому считаю, что ответ получил — благодарю.


Медвежонок Пятачок   (2009-03-16 12:54:00) [22]

Это невозможно сделать, я не знаю какие команды будут у устройств, которые появятся, скажем, в следующем году.

Тогда стоит подумать вообще о логичности выбора перечисления как нудного типа.
Хотя не вижу препятствий.
У меня тодже команды и тоже перечисления, причем даже без уточнения значений. Перечень команд постоянно из месяца в месяц растет.
И ничему этот рост не мешает.


Palladin   (2009-03-16 12:50:00) [23]


> Kolan ©   (16.03.09 12:40) [4]

И в чем проблемы?

Type
TCommandType=type Integer;

Const
mtDeviceError:TCommandType = $FF


Kolan   (2009-03-16 12:40:00) [24]

>Чем простые константы не устроили?

Из всех вариантов этот мне нравится больше всего, но плохо, что в методах придется писать Foo(Command: Integer), а не Foo(Command: TCommandTypes).

MsGuns, желание возникло так как сабжевые команды — это команды их протокола разных устройств. Часть таких команд базовая и есть во всех устройствах, а другая часть у каждого устройства своя.

>одно полное длинное перечисление.
Это невозможно сделать, я не знаю какие команды будут у устройств, которые появятся, скажем, в следующем году.


MsGuns   (2009-03-16 11:58:00) [25]

Интересно, откуда возникло такое желание, ведь суть перечислений - это именно постоянность


Palladin   (2009-03-16 11:52:00) [26]


> Kolan ©   (16.03.09 11:32) 

Чем простые константы не устроили?


Медвежонок Пятачок   (2009-03-16 11:36:00) [27]

одно полное длинное перечисление.
там, где хочется контроль по ограниченному перечню - ассерт


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо