Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Определение типа аргумента


Автор: Syle 8.5.2007, 22:59
Подскажите пожалуйста, можно ли определить тип аргумента, который передаеться функции

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

Автор: Yanis 8.5.2007, 23:19
Цитата(Syle @  8.5.2007,  23:59 Найти цитируемый пост)
Дело в том что, в моем классе надо реализовать много функций, полностью идентичных, но работающих с разными типами

Ну так делай много функций с разными типа аргумента. Вот тебе и будет «много разных функций». Незабудь пометить их директивой overload.

Наверняка вскоре здесь найдутся читальщики мыслей…

Автор: iddqd 9.5.2007, 00:44
Yanis, ему надо черную магию... не
Цитата(Yanis @  8.5.2007,  23:19 Найти цитируемый пост)
 «много разных функций»

, а
Цитата(Syle @  8.5.2007,  22:59 Найти цитируемый пост)
много функций, полностью идентичных


Но открыв чакры и прочитав мысли, также прочитав пост Yanis становится примерно понятно, что тебе надо overload.

Автор: Syle 9.5.2007, 01:34
Да наверно. Даже в древних записях Вуду, ничего об этом не говориться. Остаеться колдовать перезагрузку.

PS. Я спрашивал о возможности реализации данной структуры кода:

Код

function Voodoo(var Bone): integer;
begin
  if (Bone <являеться_типом> TDogSkeleton) then ....
  if (Bone <являеться_типом> TRatSkeleton) then ....
end;


Автор: Snowy 9.5.2007, 02:12
<являеться_типом> в Delphi зовётся is
Код

  if (Bone is TDogSkeleton) then ....

Автор: skyboy 9.5.2007, 08:23
Цитата(Snowy @  9.5.2007,  01:12 Найти цитируемый пост)
<являеться_типом> в Delphi зовётся is

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

Автор: Yanis 9.5.2007, 10:58
Цитата(Syle @  9.5.2007,  02:34 Найти цитируемый пост)
Остаеться колдовать перезагрузку.

Главное, что бы самому не перезагрузиться smile
Вот кстати, что можно ещё наколдовать:
Код
type
  TC = class
    procedure M1(a: array of const);
    procedure M2(a: Variant);
  end;

procedure TC.M1(a: array of const);
var
  h, l, i: Integer;
begin
  l := Low(a);
  h := High(a);
  for i := l to h do
    begin
      case a[i].VType of
        varInteger: { processing Integer } ;
        varDouble: { processing Double } ;
      end;
    end;
end;

procedure TC.M2(a: Variant);
begin
  case VarType(a) of
    varInteger: ShowMessage('Integer');
    varDouble: ShowMessage('Double');
    varString: ShowMessage('String');
  end;
end;

Выбирай любой метод, который нравится больше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)