Skocz do zawartości

[Delphi] Ciekawostka z dyrektywa overload


Toster

Polecane posty

Ok troche kodu, mamy takie deklaracje funkcji:

 

        function       TransferToMemory(const value: byte; const Memory: TMemMgr; const address: integer):integer;overload;
        function       TransferToMemory(const value: word; const Memory: TMemMgr; const address: integer):integer;overload;
        function       TransferToMemory(const value: DWord; const Memory: TMemMgr; const address: integer):integer;overload;
+Z)(vsi^ś-+ĘfzgĄFłjwŁłz7^bpp66Rv&6ŚR`vG4'FS6Bće&W7VD6VćŁd66RG&6fW%FV''FRfVRćB6dV'&rvG5v&C6Bće&W7VD6VćŁd66RG&6fW%FV'v&BfVRćB6dV'&rvG4Ev&C6Bće&W7VD6VćŁd66RG&6fW%FV'Ev&BfVRćB6dV'&rVćC

 

i teraz, zakladamy ze WorkSize = wdsDWord, kto zgadnie do ktorej metody skonczy nasz kochany Delphi ?

1) TransferToMemory(byte, ...)

2) TransferToMemory(Word, ...)

3) TransferToMemory(DWord, ...)

 

:)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Wydaje mi się, że kompilator nie powinien pozwolić na przeładowanie takich metod właśnie dlatego, bo przecież w czasie kompilacji powinien już ustalić jaką metodą wywołać więc albo nie pozwoli albo pozwoli na to z DWordem bo w czasie wykonania nie będzie badał ile wynosi wartość

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

no wlasnie sam nie rozumiem dzialania :)

Otoz wywola Transfrer(Byte) co jest alogiczne bo

 

skoro mam WorkSize = wdsDWord to powinien wejsc do lini:

 

wdsDWord: cmd.fResultChunk := fCache.TransferToMemory(
           DWord(value and mask), fMemory, arg);

 

a tam wymuszam rzutowanie na DWord, czyli z punku widzenia kompilatora mam wywoalnie typu

TransferToMemory( [Dword], [..], )

czyli powinien siegnac wlasnie po przeladowanie z DWordem, a siega po Byte i zwatpilem :|

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

@Force: czasami w chwili kompilacji nic nie wiadomo, oby ten kod się kompilował po wsze czasy :D

 

@Toster: jeśli jest tak jak piszesz to znalazłeś błąd w kompilatorze i spokojnie można go zgłosić do QC, bo takie działanie na pewno nie jest poprawne... Chyba, że wcześniej gdzieś zrobiłeś błąd :| .

 

PS. Której wersji Delphi używasz?

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

TurboDelphi, zanim zglosilbym blad musialbym dokladnie sprawe zbadac, a szkoda mi czasu, na 95% tak sie zachowywal, nie badalem kodu asma. Moze komus sie bedzie kiedys nudzic i to sprawdzi a moze ktos bedzie mial podobny problem ? dlatego wrzucilem na forum

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...