Überladen von IntToStr
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Überladen von IntToStr
Wenn ich IntToStr überlade, findet mein Lazarus die originalen IntToStr nicht mehr. Kommentiere ich meine Implementation aus, dann findet er sie. Wie kann ich IntToStr überladen, ohne dabei die originalen IntToStr zu verdecken?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Überladen von IntToStr
Nenns anders oder referenzier es direkt (SysUtils.IntToStr)
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Überladen von IntToStr
Genau diese Varianten wollte ich genau vermeiden. Ich möchte das bekannte IntToStr um die Fähigkeit erweitern meinen eigenen Datentyp zu unterstützen. Gleiches habe ich dann auch für diverse Operatoren etc. vor.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
Re: Überladen von IntToStr
Du könntest höchstens in deiner Unit die Inttostr aus Sysutils nochmal deklarieren.
function Inttostr(Value: integer):String; overload;
begin
Result:=Sysutils.IntToStr(Value);
end;
etc.
P.S. ich frage mich allerdings, was du für einen "eigenen Datentypen" hast, der nicht durch die RTL Versionen abgedeckt wird und auf den die Bezeichnung IntToStr noch zutreffen würde...
function Inttostr(Value: integer):String; overload;
begin
Result:=Sysutils.IntToStr(Value);
end;
etc.
P.S. ich frage mich allerdings, was du für einen "eigenen Datentypen" hast, der nicht durch die RTL Versionen abgedeckt wird und auf den die Bezeichnung IntToStr noch zutreffen würde...
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Überladen von IntToStr
Dein overload; hat mich zu des Rätsels Lösung in der Doku geführt. Dort heißt es:
Wenn ich jetzt alle 3 Varianten von IntToStr aus SysUtils wiederhole, habe ich das Problem für so lange gelöst, wie sich diese IntToStr nicht ändern (andere Datentypen), sie nicht in eine andere Unit verschoben werden und sie keinen Zuwachs bekommen (eine vierte Variante in SysUtils). Das sind zwar alles keine sehr wahrscheinlichen Fälle, aber besser würde ich es finden, wenn ich dem Compiler quasi sage, falls meine Version von IntToStr nicht passt, dann such woanders weiter. Quasi als wären die IntToStr in SysUtils mit overload gekennzeichnet.
Vielleicht ist es ja möglich nach der Definition meiner Version von SysUtils eine weitere Version zu definieren, die auf jeden beliebigen Datentyp passt (also nicht Int64 sondern ohne Typangabe oder so) und dann im Inneren SysUtils.IntToStr aufrufen. Das würde zumindest 2 von 3 der oben genannten Fälle abdecken.
Dummerweise sind die IntToStr in SysUtils nicht mit overload deklariert... das wäre zu schön gewesen.There is only one case where the overload modifier is mandatory: if a function must be overloaded that resides in another unit. Both functions must be declared with the overload modifier: the overload modifier tells the compiler that it should continue looking for overloaded versions in other units.
Wenn ich jetzt alle 3 Varianten von IntToStr aus SysUtils wiederhole, habe ich das Problem für so lange gelöst, wie sich diese IntToStr nicht ändern (andere Datentypen), sie nicht in eine andere Unit verschoben werden und sie keinen Zuwachs bekommen (eine vierte Variante in SysUtils). Das sind zwar alles keine sehr wahrscheinlichen Fälle, aber besser würde ich es finden, wenn ich dem Compiler quasi sage, falls meine Version von IntToStr nicht passt, dann such woanders weiter. Quasi als wären die IntToStr in SysUtils mit overload gekennzeichnet.
Vielleicht ist es ja möglich nach der Definition meiner Version von SysUtils eine weitere Version zu definieren, die auf jeden beliebigen Datentyp passt (also nicht Int64 sondern ohne Typangabe oder so) und dann im Inneren SysUtils.IntToStr aufrufen. Das würde zumindest 2 von 3 der oben genannten Fälle abdecken.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!