Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Overload mit gleichen Parametern (https://www.delphipraxis.net/97059-overload-mit-gleichen-parametern.html)

fLaSh11 3. Aug 2007 21:27


Overload mit gleichen Parametern
 
Hallo Dpler,

//Suche erfolglos benutzt

ich hab früher schon überladene Funktionen benutzt, da haben diese sich aber durch die Parameter unterschieden. Jetzt tun sie das nicht, sondern durch den Rückgabetypen. Bei dsdt.info lese ich das:
Zitat:

Zitat von dsdt.info
Überladene Methoden müssen sich deshalb entweder in der Anzahl der Parameter oder in den Typen dieser Parameter signifikant unterscheiden.

Also ist folglich so etwas nicht möglich?
Delphi-Quellcode:
function assign(index: byte): TTechLevel; overload;
function assign(index: byte): TSize; overload;
Delphi meckert halt, dass die Funktion "assign" nochmals deklariert wird.

MfG
Steffen

FAlter 3. Aug 2007 21:35

Re: Overload mit gleichen Parametern
 
Hi,

Es ist nicht möglich.

Warum fragst du üpberhaupt, wenn du es schon selbst herausgefunden hast?

Sowas würde aber gehen:

Delphi-Quellcode:
procedure assign(index: byte; out Result: TTechLevel); overload;
procedure assign(index: byte; out Result: TSize); overload;
Mfg
FAlter

OregonGhost 3. Aug 2007 21:37

Re: Overload mit gleichen Parametern
 
Ich stecke zwar nicht ganz so tief in den Delphi-Innereien, aber ich schätze, das Problem ist hier, dass der Compiler nicht auflösen kann, welche Version einer Funktion benötigt wird. In C++ ist eine nicht ganz unübliche Lösung für dieses Problem, Template-Parameter einzusetzen, aber ansonsten könntest du auch einfach einen anderen Namen für die Funktion vorsehen oder die im roten Kasten von FAlter vorgeschlagene Methode der Ausgabeparameter verwenden. So aus (Bibliotheks-)Konsumentensicht würde ich sagen, dass das beides eine sehr viel intuitivere Anwendung der Funktion(en) ermöglicht als überladene Rückgabewerte.

Einer der Gründe für dieses Problem (und auch dafür, dass z.B. C++-String-Klassen meistens keinen impliziten Cast von und nach PChar mitbringen) ist der, dass viele Typen auf verschiedene Weisen ineinander überführbar sind und der Compiler Mehrdeutigkeiten auflösen muss. Und Compiler können dabei furchtbar kreativ werden, was eine unangenehme Fehlerquelle darstellt und daher an einigen Stellen (wie den Rückgabewerten) von vornherein durch das Sprachdesign vermieden wird.

fLaSh11 3. Aug 2007 21:38

Re: Overload mit gleichen Parametern
 
Danke, ich war grad so vertieft, dass ich nciht an den var-/out-Parameter gedacht hab :stupid:

RavenIV 6. Aug 2007 08:28

Re: Overload mit gleichen Parametern
 
Zitat:

Zitat von fLaSh11
Also ist folglich so etwas nicht möglich?
Delphi-Quellcode:
function assign(index: byte): TTechLevel; overload;
function assign(index: byte): TSize; overload;

Nur so am Rande erwähnt:
Ich würde von einer Funktion assign erwarten, dass sie mir irgendetwas hinzufügt oder zusammenfügt.
Da würde sich ein Returnwert von True/False anbieten (erfolgreich oder nicht).

Warum soll assign ein TTechLevel oder ein TSize zurückgeben?
Erstelle besser zwei getrennte Funktionen GetTechLevel und GetSize dafür.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz