Fórum RTTI #198177
01/12/2003
0
Ex do problema:
function Recebe_Variaveis( const Variaveis: Array of Pointer ): Integer;
begin
// Obter o tipo da variavel
for i:=0 to Length( Variaveis ) -1 do
begin
// aqui seria feita a verificacao do tipo....
se Variaveis[i] é do tipo:
integer: faz x;
real: faz y;
...
end;
end;
Agradeço desde já,
Gustavocgm
Curtir tópico
+ 0Posts
01/12/2003
Rafael Heise
function Recebe_Variaveis( const Variaveis: Array of variant ): Integer; begin for i:=0 to Length( Variaveis ) -1 do begin // aqui seria feita a verificacao do tipo.... case VarType(Variaveis[i]) of varInteger: faz x; varDouble: faz y; ... end; end; end;
e aconselho ainda você a criar função com a declaração como overload, assim, função com o mesmo nome passando como parâmetro tipos diferentes sendo
funcao FazIsso(aValor: integer); overload;
funcao FazIsso(aValor: real); overload;
e ao invés das chamadas faz x; e faz y; usaria a mesma chamada apenas passando o tipo, assim, você tira até a validação para o tipo
(essa seria ma segunda opção para você fazer o que quer)
sendo:
function Recebe_Variaveis( const Variaveis: Array of variant ): Integer; begin for i:=0 to Length( Variaveis ) -1 do FazIsso(Variaveis[i]); end;
ou ainda você pode usar a sua declaração com Pointer chamando então as funções com overload
sendo:
function Recebe_Variaveis( const Variaveis: Array of Pointer ): Integer; begin for i:=0 to Length( Variaveis ) -1 do FazIsso(Variaveis[i]^); end;
beleza?
valeu
Gostei + 0
01/12/2003
Beppe
function Recebe_Variaveis( const Variaveis: Array of variant ): Integer; begin for i:=0 to Length( Variaveis ) -1 do FazIsso(Variaveis[i]); end;
Isto não funciona. As funções ´FazIsso´ não aceitam [i:969ce7b7f4]dispatching[/i:969ce7b7f4], ie a função não é escolhida com base no tipo dinâmico(tipo que tem em tempo de execução) da expressão.
Para chamar estas funções, você precisa indicar qual quer chamar. Um [b:969ce7b7f4]case[/b:969ce7b7f4] ainda é necessário, além de usar uma [i:969ce7b7f4]typecast[/i:969ce7b7f4] no argumento passado.
procedure Recebe_Variaveis(const Variaveis: array of Variant); var I: Integer; begin for I :=0 to High(Variaveis) do case VarType(Variaveis[I]) of varInteger: FazIsso(Integer(Variaveis[I])); varString: FazIsso(String(Variaveis[I])); ... end; end;
Gostei + 0
01/12/2003
Rafael Heise
mas dai você pode fazer direto
FazIsso(VarAsType(Variaveis[i],VarType(Variaveis[i])));
talvez funcione... talvez não...
não testei nada no Delphi.... não sei se compila...
Gostei + 0
01/12/2003
Gustavocgm
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)