![]() |
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:
Delphi-Quellcode:
Delphi meckert halt, dass die Funktion "assign" nochmals deklariert wird.
function assign(index: byte): TTechLevel; overload;
function assign(index: byte): TSize; overload; MfG Steffen |
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:
Mfg
procedure assign(index: byte; out Result: TTechLevel); overload;
procedure assign(index: byte; out Result: TSize); overload; FAlter |
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. |
Re: Overload mit gleichen Parametern
Danke, ich war grad so vertieft, dass ich nciht an den var-/out-Parameter gedacht hab :stupid:
|
Re: Overload mit gleichen Parametern
Zitat:
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 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz