![]() |
Einer Funktion einen beliebigen Typ überliefern
Ich mein so was:
Delphi-Quellcode:
nur das v eben KEIN Integer sein soll, sondern ein beliebiger Typ. Ich hab das Forum durchsucht, aber nix gefunden.
function f(v:integer):integer;
begin [...] end; Bei Blockread/write wird ja genau das gemacht, also muss es doch möglich sein :?: :gruebel: |
Re: Einer Funktion einen beliebigen Typ überliefern
![]() |
Re: Einer Funktion einen beliebigen Typ überliefern
Variant is doch auch bloß ein typ unter vielen? dazu noch eine Ausnahme...
Zitat:
|
Re: Einer Funktion einen beliebigen Typ überliefern
und wie lautet der Fehler? könnte dieser vielleicht am letzten parameter liegen (der in eckigen klammern) Denn normaler Weise geht es einfach keinen Typ anzugeben (siehe TStream.Write bzw. TStream.Read). Bei Typenlosen parametern musst du nur aufpassen das es als "var" deklariert ist damit es funktioniert ansonsten geht es nicht. Denn durch den Var wird letztendlich nur die Adresse übergeben (Referenz) was einem Pointer entspricht.
Also
Delphi-Quellcode:
entspricht
procedure ZeigeMsg(var AMsg; ALen: Integer);
Delphi-Quellcode:
Und daher kann auch jeder Typ übergeben werden.
procedure ZeigeMsg(AMsg: Pointer; ALen: Integer);
|
Re: Einer Funktion einen beliebigen Typ überliefern
Das mit dem untypisierten Parameter geht schon, aber die eckigen Klammern dürfen nicht in einem Funktionskopf stehen. ;)
Sie dienen nur in der OH der Kennzeichnung eines optionalen Parameters. Diese werden durch Standardwerte definiert. |
Re: Einer Funktion einen beliebigen Typ überliefern
ne, ich will es ja gar nicht so compilieren wie es in der OH steht sondern so:
Delphi-Quellcode:
zu den eckigen klammern: wie mach ich das dann?
function blockwrite(buf; bytecount:integer):integer;
wenn ich z.B.
Delphi-Quellcode:
eingebe, kommt ja ne Liste von hunderttausend Befehlen, die alle in der Unit sind, und das geht mit selbstgemachten Units auch. Und da werden die eckigen klammern angegeben...
windows.
Zitat:
|
Re: Einer Funktion einen beliebigen Typ überliefern
das liegt wie bereits geschrieben daran das bei "var" und "const" nur die Speicheradressen übergeben werden was eben gleich zu setzen ist als ob der Typ ein Pointer wäre.
|
Re: Einer Funktion einen beliebigen Typ überliefern
aha, wieder was gelernt :coder2:
aaaaber, wie kann ich jetzt optionale Parameter angeben? |
Re: Einer Funktion einen beliebigen Typ überliefern
optionale parameter gibt man so an
Delphi-Quellcode:
procedure Beispielprocedure(OptionalerParameter: Integer=StandardWert);
|
Re: Einer Funktion einen beliebigen Typ überliefern
Am einfachsten mit
Delphi-Quellcode:
:mrgreen:
procedure DeleteUser (const User: String = 'ichbins');
DeleteUser(); //ist das gleiche wie DeleteUser ('ichbins'); Man muss optionale aber nach Pflichtparametern angeben <== Das war bei SirT nicht :mrgreen: Edits: Scheiß Tastatur ich habe ... :evil: |
Re: Einer Funktion einen beliebigen Typ überliefern
@fjeins: Wo hab ich das denn falsch gemacht? ich hab maximal einen typenlosen parameter vor einem typisierten angegeben und bei dem anderen beispiel hab ich nur einen parameter und somit auch keinen optionalen vor einem pflichparameter.
|
Re: Einer Funktion einen beliebigen Typ überliefern
Zitat:
Ich wollte damit nur sagen, dass man halt erst die pflichtparameter angeben muss; damit mein Beitrag keinen Informationsgehalt von Null hat :mrgreen: P.S. Die Tastatur nervt :cry: |
Re: Einer Funktion einen beliebigen Typ überliefern
Zitat:
Zitat:
|
Re: Einer Funktion einen beliebigen Typ überliefern
ups, hab ich mich im namen verschrieben gehabt.
Ahja, jetzt versteh ich den Zusatz mit "Das war bei SirT nicht". Das klang für mich so als ob ich das falsch gemacht hätte und nicht danach das ich es einfach nicht erwähnt hab... Hab das wohl weg gelassen da man es anhand der Fehlermeldung die der Compiler bringt leicht selbst herausfindet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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