AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Verschiedene Aufzählungstypen in einer Funktion verwenden.

Verschiedene Aufzählungstypen in einer Funktion verwenden.

Ein Thema von bernau · begonnen am 26. Mär 2012 · letzter Beitrag vom 27. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.231 Beiträge
 
Delphi 11 Alexandria
 
#1

Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 26. Mär 2012, 23:49
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:
type
  TAtype1 = (def1_x1, def1_x2, def1_x3, def1_x4, def1_x5, def1_x6);
  TAtype2 = (def2_y1, def2_y2, def2_y3);
Zu jedem dieser Elemente wird ein String gespeichert. Dazu wird folgendes definiert.


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:
  fData1: array of TAtype1Data;
  fData2: array of TAtype2Data;
Damit habe ich eine gute Möglichkeit auf die Daten zuzugreifen.


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:
result:=eineBerechnungFuerData1Und2(def1_x1,def1_x2,fData1);
//oder
result:=eineBerechnungFuerData1Und2(def2_y1,def2_y2,fData2);
Ich weis aber nicht, wie ich die Funktion deklarieren soll.


Hoffentlich hat das jemand verstanden
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 00:14
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);
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.509 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 00:22
Zitat:
TAtype1Data = array [lo(TAtype1) .. high(TAtype1)] of string;
Bei ordinalen Typen und mit vollständigem Wertebereich, da kann man es sich auch einfach machen.
TAtype1Data = array [TAtype1] of string;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 01:42
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.231 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 01:42
Bei ordinalen Typen und mit vollständigem Wertebereich, da kann man es sich auch einfach machen.
TAtype1Data = array [TAtype1] of string;
Aahhh. Wieder was gelernt. Danke.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.231 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 01:50
so?
Delphi-Quellcode:
Function eineBerechnungFuerData1Und2(a,b:TAtype1;var c:TAtype1DataArray):Integer;
begin
 //
end;

eineBerechnungFuerData1Und2(def1_x1,def1_x2,fdata1);
Ne. Leider nicht. Dann könnte ich ja nur fData1 übergeben und nicht fData2. Und die ersten beiden Werte der Funktion dürften auch nur vom Type TAtype1 sein und nicht vom Type TAtype2.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.231 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 01:59
Meinst du sowas?
Delphi-Quellcode:

procedure EineBerechnungFuerfData(aType1,aType2:TAtype1); overload;
procedure EineBerechnungFuerfData(aType1,aType2:TAtype2); overload;
Ne auch das meinte ich nicht. Mir geht es darum die Procedure nur einmal zu haben. Bei deiner Version ist die Procedure zwei mal vorhanden. Und dies mit fast identischem Code. So habe ich es ja jetzt, nur das diese Procedure etwas komplexer (>50Zeilen) ist. Die zweite Procedure wurde quasi kopiert und mit einem Copy/Paste wurde Type1 gegen Type2 ausgetauscht. Nun habe ich das ziemlich vereinfacht im ersten Post beschrieben. Tatsächlich gibt es aber nicht nur Type1 und Type2 sonder auch Type3 Type4 und Type5. Damit hätte ich den gleichen Code fünf mal. Und das ist bestimmt kein guter Programmierstil
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
8.506 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 07:13
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 08:12
Aus diesem Grund nehme ich von Enumerationstypen Abstand und kodiere die einzelnen Elemente lieber als CONST.

Delphi-Quellcode:
Const
   def1_x1 = 0;
   def1_x2 = 1;
   ....
   def1_max = 2;

   def2_y1 = 0;
   def2_x5 = 1;
  ...
   def2_max = 1;
Der Rest wird ein wenig angepasst. Einziger kleiner Nachteil: Die Anzahl der Elemente ergibt sich dann nicht implizit (durch High(EnumTyp) sondern muss manuell gepflegt werden (def_max).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
8.506 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Verschiedene Aufzählungstypen in einer Funktion verwenden.

  Alt 27. Mär 2012, 08:34
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf