Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Как проверить вхождение числа в перечисляемый тип?   Найти похожие ветки 

 
Aleksandr.   (2005-06-22 17:23) [0]

Объявляется тип

type
 TMyType = (mt1 = 1, mt2=20, mt3=35);

создается функция, которая целое число должна проверить для приведения типов, является ли оно входящим в этот тип:

function IsInType(const I : integer) : boolean;
var
 x : integer;
begin
 Result:=false;
 for x:=Ord(Low(TMyType)) to Ord(High(TMyType)) do
   if I=X then begin
     Result:=true;
     Break
   end
end;


Но для данной функции тип должен быть заведомо известен (TMyType).
А можно ли сделать универсальную функцию, которой вторым параметром как-то загнать сверяемый тип?


 
Digitman ©   (2005-06-22 17:28) [1]


> для приведения типов


приведением простых типов занимается компилятор, и речи о ран-тайм не идет и идти не может


 
Aleksandr.   (2005-06-22 17:28) [2]

Тьфу, не туды тыркнул.
И как сделать перебор пользовательского типа, чтобы он в цикле for переходил не на x+1, а сразу на следующее значение типа (то есть с 1 на 20, а не 2)?


 
Digitman ©   (2005-06-22 17:30) [3]

оператор IN для множеств уже упразднили ?


 
evvcom ©   (2005-06-22 17:30) [4]

Посмотри в справке TTypeInfo и пример к GetEnumValue function. Похоже это то, что тебе надо.


 
jack128 ©   (2005-06-22 17:31) [5]

Aleksandr.   (22.06.05 17:23)
нет. Для реализации подобной функции нужна RTTI информация, для перечисляемых типов, у которых явно задается порядковый номер элементов, такая информация не генерится. Так что каждый раз придется вручную проверку на допустимость значения делать..


 
jack128 ©   (2005-06-22 17:33) [6]

Aleksandr.   (22.06.05 17:28) [2]
И как сделать перебор пользовательского типа, чтобы он в цикле for переходил не на x+1, а сразу на следующее значение типа (то есть с 1 на 20, а не 2)?


в твоем случае
var
 x: TMyType;
for x := low(TMyType) to high(TMyType) do
begin
 i := Integer(TMyType);
 ...
end;

Digitman ©   (22.06.05 17:30) [3]
а где здесь множества? ;)


 
evvcom ©   (2005-06-22 17:34) [7]

А вообще, конечно, не представляю для чего это надо. Лучше обратить внимание на [3].


 
Aleksandr.   (2005-06-22 17:45) [8]

спасибо. Придется в массив переделать...


 
evvcom ©   (2005-06-22 17:47) [9]


> а где здесь множества? ;)

Видимо автор хочет проверять принадлежность числа тому или иному перечисляемому типу, хотя проще проверить на вхождение в то или иное множество, причем даже без дополнительной функции, работающей по принципу перебора.


 
evvcom ©   (2005-06-22 17:48) [10]


> Придется в массив переделать...

Лучше в множества-константы, если я правильно понял, что надо.



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.056 c
10-1095699307
AlexSV
2004-09-20 20:55
2005.07.11
как использовать idl из MSDN


1-1118902502
Магнум
2005-06-16 10:15
2005.07.11
TListView and "Array index out of bounds"


14-1118048509
kot andrei
2005-06-06 13:01
2005.07.11
ник


3-1117369737
Erich
2005-05-29 16:28
2005.07.11
Ошибка при выполнении SQL запроса.


14-1118596069
le[x]
2005-06-12 21:07
2005.07.11
Помогите с курсовой