![]() |
Funktionen überladen
ja, ich weiß schon wie das geht,
aber es funktioniert ja leider nur Unit-intern. Gibt es 'ne Möglichkeit auch Unitübergreifend zu überladen? (Normalerweise wird in soeinem Fall ja überschrieben :cry: ) ein Beispiel: ich definiere mir eine IntToStr und wenn jetzt die Unit, wo ich dieses definiert habe, nach der SysUtils eingebunden ist, dann wird ja nur noch meine Definition verwendet und nicht mehr die aus der SysUtils, selbst wenn der verwendete Parametertype auf die Version in der SysUtils paßt ... in soeinem Fall meckert der Kompiler einfach nur und meint was von inkompatiblen Typen :wall: Der Kompiler sucht doch eh schon rückwärts in allen Units, bis er eine Funktion mit passendem Namen findet, nur hört er dann in dieser Unit auf mit Suchen. Es wär also schön, wenn man ihn dazubringen könnte auch noch weiterzusuchen, wenn in dieser Unit nichts mit passenden Parametern zu finden ist. |
Re: Funktionen überladen
das problem ist, dass sie in unterschiedlichen namespaces liegen.
was du machen könntest, wäre, die funktionen komplett in deiner unit zu definieren und bei der anderen, welche du in der anderen unit überschreibst, diese ebenfalls zu deklarieren und sie im anschluss aufzurufen... so in etwa
Delphi-Quellcode:
ungetestet, kannst ja mal checken...
myUnit
interface function inttostr(aShort: byte): string; overload; function inttostr(aLongint: longint): string; overload; implementation function inttostr(aShort: byte): string; begin ... end; function inttostr(aLongint: longint): string; begin result := sysutils.inttostr(aLongint); end; |
Re: Funktionen überladen
An sowas in dieser Richtung hate ich zwar auch schon gedacht.
(bei eigenen Funktionen hab is schon einige Male per ASM-Jump gelöst ... erspart einem die Parameterübergabe und den zusätzlichen Rückprung) nur bei sowas wie Dec und Inc ist es doch nicht sonderlich schön, da hierdurch ein wesendlicher Nachteil entsteht. (vorher sehr optimaler Inlinecode und danach bestimmt mindestens ein Funktionsaufruf). Grund: ich wöllte für meine BigInt Delphis Integer-Funktionen überladen. |
Re: Funktionen überladen
Ist das nicht das, was Andreas (aka jbg) in einigen seiner Units macht: Sich woanders "reinschummeln"? (Ist jetzt nicht böse gemeint ;-) )
Ich meine, dass Du dieses Prinzip zum Beispiel in der von Andreas veröffentlichten RTLVCLOptimize.pas - Unit umgesetzt finden müsstest. Ein Blick ist diese Unit jedenfalls Wert. |
Re: Funktionen überladen
was hälst du von, hier mit class operators zu arbeiten? entweder das ganze als klasse aufzubauen, oder als record (ab D2006)?
dann gäbs so etwas mydata.toString oder myData.inc |
Re: Funktionen überladen
@Daniel:
hab schon reingeschaut :angel: Die RTLVCLOptimize.pas ersetzt delphieigene Funktionen durch Bessere. Ich möchte nur erweitern, aber die schon vorhandenen Funktionen sollen dennoch weiterhin "leicht" nutzbar sein. (ohne Angabe des anderen Namespace) Am Liebsten wäre es mir, wenn der Compiler direkt die richtigen Funktionen anspringen läßt und ich nicht erst über 'ne eigene Dummy-Funktion umleiten muß. @grenzgaenger: sowas wie myData.inc; hab ich schon, aber ich wollte gern auch noch die Standardfunktion Inc(myData); nutzbar machen :stupid: [add] Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz