Databáze > Obecné

Generika a číselné typy

(1/2) > >>

PetrB0:
Ahoj,
řeším drobný zádrhel s generiky. Mám následující kód

--- Kód: ---unit TestGen;

interface
Type
    TVektor<T> = Class
                  private
                   pObsah    : Array Of T;
                  public
                  Procedure Zapocti(Const VHodnota : T);
                 End;
implementation

{ TVektor<T> }

procedure TVektor<T>.Zapocti(const VHodnota: T);
Var
   __I : Integer;
begin
 for __I := Low(pObsah) to High(pObsah) do
  pObsah[__I]:=pObsah[__I]+VHodnota;
end;

end.

--- Konec kódu ---
Který mi Delphi 10.2 nepřeloží a vrátí chybu (u řádku pObsah[__I]:=...)
Operator not applicable to this operand type.
Já vím, že T bude jenom číselný typ (double nebo Integer). Pro ten by se to patrně přeložilo, ale jak to kompilátoru sdělit?
Máte nějaký typ?

Díky

Pb

pf1957:

--- Citace: PetrB0  31-07-2020, 16:57:28 ---    TVektor<T> = Class

--- Konce citace ---
Dela se to pomoci tzv. constraints viz http://docwiki.embarcadero.com/RADStudio/Sydney/en/Constraints_in_Generics tj. nejak musis vymyslet

--- Kód: ---    TVektor<T: TMyType> = Class
--- Konec kódu ---

Stanislav Hruška:
Okrem toho že T predstavuje "class" či nejaký typ, tak ja by som namiesto poľa Array of T... tak isto použil generikum. Kto sa má potom starať o veľkosť poľa?

PetrB0:

--- Citace: Stanislav Hruška  31-07-2020, 19:33:47 ---Okrem toho že T predstavuje "class" či nejaký typ, tak ja by som namiesto poľa Array of T... tak isto použil generikum. Kto sa má potom starať o veľkosť poľa?

--- Konce citace ---
Ten "management" okolo velikost pole mám v jiných metodách, to je v pohodě. Jde mi jenom čistě o tuto metodu pro počítání.

PetrB0:

--- Citace: pf1957  31-07-2020, 18:49:25 ---
--- Citace: PetrB0  31-07-2020, 16:57:28 ---    TVektor<T> = Class

--- Konce citace ---
Dela se to pomoci tzv. constraints viz http://docwiki.embarcadero.com/RADStudio/Sydney/en/Constraints_in_Generics tj. nejak musis vymyslet

--- Kód: ---    TVektor<T: TMyType> = Class
--- Konec kódu ---

--- Konce citace ---

Jo, to jsem tak nějak tušil, ale mám obavu že obecný TNumericType (předek všech číselných typů) neexistuje. ;-)
No, patrně se na to vybodnu a udělám to všechno jako double. Bude to cca pět polí o 400 prvcích, které potřebují double a jedno o 400 prvcích, kde by stačilo Integer.

Díky

Pb

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi