Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 1.881 c
4-1115708906
TriboSM
2005-05-10 11:08
2005.07.11
Получить заголовок документа в спулере печати


6-1112684047
frEE)stylEr
2005-04-05 10:54
2005.07.11
подключение удалённого доступа


14-1118603404
focor
2005-06-12 23:10
2005.07.11
+++Windows MOBILE+++


14-1117999625
vecna
2005-06-05 23:27
2005.07.11
Где остановиться в Питере.


6-1112762797
Solidol
2005-04-06 08:46
2005.07.11
Прямой запуск файла из TWebBrowser1 ..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский