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

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

Определить тип данных [D7]


Страницы:   1 2 3 4

Сергей ©   (2014-03-25 11:06:00) 

Var I:int64; B:Byte;W:word;
Procedure Proc1(e:int64); Begin {код}end;
Можно ли определить в коде самой процедуре что ей передаётся т.е. чиловое значение Proc1(34) или переменная какого типа Proc1(b);Proc1(w);Proc1(I);? Как это сделать ?


Inovet   (2014-03-25 12:12:00) [61]

> [9] Сергей   (25.03.14 12:09)
> clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.

А надо представлять. В хелпе всё описано. Дебагер имеется.


Inovet   (2014-03-25 12:11:00) [62]

Можно. Нало пойти по стеку на адрес возврата и там поковырять на предмет константности переданного значения. Вот это будет уже полный
> изврат, неоптимально, адъ и Израиль.


Сергей   (2014-03-25 12:09:00) [63]

clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.
=======================================
Попробую выразить еще так:
Const i64c:int64=0;
Var i64:int64;
{.....}
i64:=0;
Proc1(0); Proc1(i64); Proc1(i64c);
ноль “0” передавать в процедуру можно! Но если это переменная или константа то она не может быть нулём и нужно выдать ошибку. Реально ли такое сделать ?


clickmaker   (2014-03-25 12:05:00) [64]

> [7] Сергей   (25.03.14 11:58)

ты вообще представляешь, как параметры типа значение в функцию передаются?


Сергей   (2014-03-25 11:58:00) [65]

Ega23, жаль! :-( Не то!
У меня вопрос стоит так:
"Жесткое" ли число (т.е. в виде чисел) или всё такие переменная? (типа int64).


Ega23   (2014-03-25 11:53:00) [66]


> Вот только с числовыми жёсткими значениями как быть ? 2?
>  234? 34567? и т.д

ЕМНИП, они к ближайшему диапазону будут приведены.
Ну там, 2 - varByte, 234 - varWord и т.п.
Если только явно не приводить:
Foo(Integer(2));

Но на всякий ещё раз напоминаю: это - изврат, неоптимально, адъ и Израиль.


Сергей   (2014-03-25 11:50:00) [67]

Ega23, спасибо это видимо то что нужно! попробую!
Вот только с числовыми жёсткими значениями как быть ? 2? 234? 34567? и т.д


Ega23   (2014-03-25 11:37:00) [68]

Можно, но извращённо.

procedure TForm9.Button2Click(Sender: TObject);
var
 b: Byte;
 w: Word;
 i: Integer;
 i64: Int64;
begin
 Foo(b);
 Foo(w);
 Foo(i);
 Foo(i64);
 Foo('foo');
end;

procedure TForm9.Foo(Value: Variant);
begin
 case VarType(Value) of
   varByte   : ShowMessage('Byte');
   varWord   : ShowMessage('Word');
   varInteger : ShowMessage('Integer');
   varInt64  : ShowMessage('Int64');
   else
     ShowMessage('Unknown');
 end;
end;


sniknik   (2014-03-25 11:35:00) [69]

в коде можно определить тип у вариантов, а не у "жесткого" типа.
+ можно конечно сделать несколько "перекрытых" (overload)  процедур... но это не в коде будет определятся, а на этапе компиляции. какую процедуру подставить... ну весьма не надежно/не очевидно если хочешь писать так как написал - Proc1( 34) .


Германн   (2014-03-25 11:29:00) [70]

http://www.delphibasics.ru/Overload.php


clickmaker   (2014-03-25 11:08:00) [71]

> Можно ли определить в коде самой процедуре что ей передаётся

нет


Страницы:   1 2 3 4

Наверх

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