AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen überladen

Ein Thema von himitsu · begonnen am 25. Mai 2008 · letzter Beitrag vom 25. Mai 2008
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#1

Funktionen überladen

  Alt 25. Mai 2008, 15:04
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 )


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




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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#2

Re: Funktionen überladen

  Alt 25. Mai 2008, 15:11
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:
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;
ungetestet, kannst ja mal checken...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#3

Re: Funktionen überladen

  Alt 25. Mai 2008, 15:20
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Funktionen überladen

  Alt 25. Mai 2008, 15:24
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#5

Re: Funktionen überladen

  Alt 25. Mai 2008, 15:28
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#6

Re: Funktionen überladen

  Alt 25. Mai 2008, 16:32
@Daniel:
hab schon reingeschaut

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


[add]
Zitat:
{$IRGENDWAS 'System.Inc' as 'Inc'}
irgendwas seitens Delphi, womit man z.B. fremde Funktionen in den eigenen Nameppace holen könnte, wäre schon toll?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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