Avatar billede mbsnet Nybegynder
30. maj 2008 - 19:36 Der er 11 kommentarer og
1 løsning

Simpel spm omkring overload

Hej.
Vil lige spørge om der kan spares noget af koden i dette eksempel (enten før eller efter implementation)...

- det er jo samme kode i hver procedure efter implementation.

function same(const a,b:byte):boolean;overload;
function same(const a,b:smallInt):boolean;overload;
function same(const a,b:longInt):boolean;overload;
function same(const a,b:int64):boolean;overload;
function same(const a,b:char):boolean;overload;
function same(const a,b:extended):boolean;overload;
function same(const a,b:handleName):boolean;overload;
function same(const a,b:ansiString):boolean;overload;

implementation

function same(const a,b:byte):boolean;begin result:=a=b end;
function same(const a,b:smallInt):boolean;begin result:=a=b end;
function same(const a,b:longInt):boolean;begin result:=a=b end;
function same(const a,b:int64):boolean;begin result:=a=b end;
function same(const a,b:char):boolean;begin result:=a=b end;
function same(const a,b:extended):boolean;begin result:=a=b end;
function same(const a,b:string):boolean;begin result:=a=b end;


//eks: if same(i,4) then...

mvh mbs
Avatar billede mbsnet Nybegynder
30. maj 2008 - 19:37 #1
se bort fra "handleName"
Avatar billede arne_v Ekspert
30. maj 2008 - 19:56 #2
Du boer kunne spare alle dem hvor Delphi selv vil lave en konvertering ar argumenter.
Avatar billede mbsnet Nybegynder
30. maj 2008 - 20:41 #3
Altså spare dem helt ? - vil det ikke påvirke performance
Avatar billede mbsnet Nybegynder
30. maj 2008 - 20:49 #4
Hvis jeg kun sletter dem efter implementation siger den "Unsatisfied forward or external declaration", og hvis man fjerner eks byte og smallInt, vil kompileren jo ikke acceptere disse typer efterfølgende
Avatar billede arne_v Ekspert
31. maj 2008 - 01:14 #5
De skal slettes i både interface og implementation.

Du kan formentlig nøjes med string og extended, men jeg ville nok tilføje int64 også.
Avatar billede mbsnet Nybegynder
31. maj 2008 - 21:50 #6
Ok, det virker med byte og smallInt, selvom jeg nu kun har beholdt disse 4.

function same(const a,b:longInt):boolean;overload;
function same(const a,b:int64):boolean;overload;
function same(const a,b:extended):boolean;overload;
function same(const a,b:string):boolean;overload;

implementation

function same(const a,b:longInt):boolean;begin result:=a=b end;
function same(const a,b:int64):boolean;begin result:=a=b end;
function same(const a,b:extended):boolean;begin result:=a=b end;
function same(const a,b:string):boolean;begin result:=a=b end;

Derudover vil jeg gerne vide, om der kan spares i forhold til balancen - altså hvis der er 4 deklareringer før implementation, skal der så også være 4 efter, eller kan der laves en fælles på en måde
Avatar billede arne_v Ekspert
31. maj 2008 - 22:36 #7
Kan du ikke også undvære longint ?

Nej - jeg mener at N interface kræver N i implementation.
Avatar billede mbsnet Nybegynder
01. juni 2008 - 00:47 #8
ok. Kan man ikke ricikere, at den kan blive langsommere ved at konvertere de "små" type til int64
Avatar billede arne_v Ekspert
01. juni 2008 - 02:26 #9
Jo.

Jeg målte lige.

På min PC koster en sådan konvetering 0.0000000006 sekund.

Eller 1 milliard konverteringer koster 0.6 sekund.

Det betyder næppe noget for performance af dit samlede program.
Avatar billede mbsnet Nybegynder
02. juni 2008 - 00:25 #10
Ok, tak for hjælpen. Jeg vil huske det med konvertering af argumenter.
Det giver god mening. Kan godt skrumpe mine koder lidt ekstra, nu :)

Der er points hvis svar
Avatar billede arne_v Ekspert
02. juni 2008 - 00:31 #11
svar
Avatar billede arne_v Ekspert
02. juni 2008 - 00:33 #12
Hvis du kigger på Delphi's egne funktioner, så vil du at rigtigt mange af dem tager
en extended som argument for at undgå en stribe duplikater.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester