![]() |
Verschiedene Aufzählungstypen in einer Funktion verwenden.
Ich habe grade ein Problem einen Lösungsansatz zu finden. Vieleicht könnt Ihr mir weiter helfen.
Ich habe verschiedene Aufzählungstypen. Diese können eine verschiedene Anzahl von Definitionen beinhalten.
Delphi-Quellcode:
Zu jedem dieser Elemente wird ein String gespeichert. Dazu wird folgendes definiert.
type
TAtype1 = (def1_x1, def1_x2, def1_x3, def1_x4, def1_x5, def1_x6); TAtype2 = (def2_y1, def2_y2, def2_y3);
Delphi-Quellcode:
type
TAtype1Data = array [lo(TAtype1) .. high(TAtype1)] of string; TAtype2Data = array [lo(TAtype2) .. high(TAtype2)] of string; im Programm werden damit dann Variablen definiert.
Delphi-Quellcode:
Damit habe ich eine gute Möglichkeit auf die Daten zuzugreifen.
fData1: array of TAtype1Data;
fData2: array of TAtype2Data; Nun habe ich eine Funktion, die ich auf alle Type anwenden könnte. Zur Zeit so definiert:
Delphi-Quellcode:
procedure EineBerechnungFuerfData1(aType1,aType2:TAtype1);
var a:integer; begin // Jetzt ein einfacher code, der aber viel komplexer ist for a:=0 to length(fData1) do begin fData1[a,aType1]:=fData1[a,aType2]; end; end; procedure EineBerechnungFuerfData2(aType1,aType2:TAtype2); begin // Im Prinzip der gleiche Programmcode, nur das ganze passiert für fData2 for a:=0 to length(fData2) do begin fData2[a,aType1]:=fData1[a,aType2]; end; end; Ich hätte gerne eine Funktion die ich so aufrufe:
Delphi-Quellcode:
Ich weis aber nicht, wie ich die Funktion deklarieren soll.
result:=eineBerechnungFuerData1Und2(def1_x1,def1_x2,fData1);
//oder result:=eineBerechnungFuerData1Und2(def2_y1,def2_y2,fData2); Hoffentlich hat das jemand verstanden ;-) |
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
so?
Delphi-Quellcode:
TAtype1 = (def1_x1, def1_x2, def1_x3, def1_x4, def1_x5, def1_x6); TAtype2 = (def2_y1, def2_y2, def2_y3); TAtype1Data = array [low(TAtype1) .. high(TAtype1)] of string; TAtype2Data = array [low(TAtype2) .. high(TAtype2)] of string; TAtype1DataArray = array of TAtype1Data; TAtype2DataArray = array of TAtype2Data; var fData1: TAtype1DataArray; fData2: TAtype2DataArray; Function eineBerechnungFuerData1Und2(a,b:TAtype1;var c:TAtype1DataArray):Integer; begin // end; eineBerechnungFuerData1Und2(def1_x1,def1_x2,fdata1); |
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Zitat:
Delphi-Quellcode:
TAtype1Data = array [TAtype1] of string;
|
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Meinst du sowas?
Delphi-Quellcode:
interface
procedure EineBerechnungFuerfData(aType1,aType2:TAtype1); overload; procedure EineBerechnungFuerfData(aType1,aType2:TAtype2); overload; implementation procedure EineBerechnungFuerfData(aType1,aType2:TAtype1); var a:integer; begin // Jetzt ein einfacher code, der aber viel komplexer ist for a:=0 to length(fData1) do begin fData1[a,aType1]:=fData1[a,aType2]; end; end; procedure EineBerechnungFuerfData(aType1,aType2:TAtype2); begin // Im Prinzip der gleiche Programmcode, nur das ganze passiert für fData2 for a:=0 to length(fData2) do begin fData2[a,aType1]:=fData1[a,aType2]; end; end; |
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Zitat:
|
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Zitat:
|
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Zitat:
|
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Mit Generics würde mir da eine sehr simple Möglichkeit einfallen, aber da du noch bei Delphi 2007 bist, geht das natürlich nicht.
Deshalb würde ich dir raten einfach wirklich 5 solcher Überladungen nach außen zu deklarieren und intern die Werte auf Integer gecastet mit einem entsprechenden Typparameter an eine einzelne Funktion weiterzureichen. Da nach außen nur die richtigen Typen reinkommen, ist das intern ja kein Problem. Am einfachsten erstellst du dir dann einen Aufzählungstyp mit den 5 Typen und nimmst ein zweidimensionales Array, bei dem die erste Dimension dieser Typ ist. |
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Aus diesem Grund nehme ich von Enumerationstypen Abstand und kodiere die einzelnen Elemente lieber als CONST.
Delphi-Quellcode:
Der Rest wird ein wenig angepasst. Einziger kleiner Nachteil: Die Anzahl der Elemente ergibt sich dann nicht implizit (durch
Const
def1_x1 = 0; def1_x2 = 1; .... def1_max = 2; def2_y1 = 0; def2_x5 = 1; ... def2_max = 1;
Delphi-Quellcode:
sondern muss manuell gepflegt werden (def_max).
High(EnumTyp)
|
AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.
Das hat aber den Nachteil, dass die Typen nicht mehr automatisch geprüft werden. Deshalb nutze ich lieber Enumerationen und mit Generics lässt sich das ja auch sehr gut umsetzen. ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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