Главная страница
    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.46 MB
Время: 0.043 c
14-1118120846
Девелопер
2005-06-07 09:07
2005.07.11
Утилиты для защиты от отладки и(или) запутывания модуля.


4-1116170119
vaxluk
2005-05-15 19:15
2005.07.11
смена обоев рабочего стола


1-1118412430
Yury
2005-06-10 18:07
2005.07.11
Эксперт для Delphi


14-1118513659
Delphi-beginer
2005-06-11 22:14
2005.07.11
Квадратные уравнения.Помогите новечку.


4-1115567113
vaxluk
2005-05-08 19:45
2005.07.11
запуск внешних программ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский