AGB  ·  Datenschutz  ·  Impressum  







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

verschiedene Sets an Prozedur übergeben

Ein Thema von Angel4585 · begonnen am 5. Sep 2006 · letzter Beitrag vom 6. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:15
Hallo,

wie kann ich folgendes realisieren, ohne eine überladene Prozedur zu verwenden:

Delphi-Quellcode:
type
TMyClass1 = (a,b,c,d);
TMyClass2 = (e,f,g,h);
TMySet1 = set of TMyClass1;
TMySet2 = set of TMyClass2;


procedure DoSomethingWithAnySet(ASet : set);//Was für einen Typ muss de Parameter haben, damit ich jedes Set übergeben kann?
begin

end;

procedure TForm1.Button1Click(Sender : TObject);
var
  set1 : TMySet1;
  set2 : TMySet2;
begin
DoSomethingWithAnySet(set1);
DoSomethingWithAnySet(set2);
end;
Geht das irgendwie ohne die Prozedur zu überladen?

MfG

Edit:

Es sollte so funktionieren wie bei Objekten:

Delphi-Quellcode:
type
 TMyObject1 = class(TObject)
   .
   .
   .
   end;

 TMyObject2 = class(TObject)
   .
   .
   .
   end;

procedure DoSomething(AObject : TObject);//Hier kann ich ja auch beide Objekttypen übergeben
begin

end;
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:17
Dumme Frage: Wie willst du das dann innerhalb von der Prozedur verarbeiten?

Wenn es nicht wichtig ist, was für ein Set das ist, könntest du evtl einen Pointer oder einen typlosen Parameter übergeben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:20
Zitat von 3_of_8:
Dumme Frage: Wie willst du das dann innerhalb von der Prozedur verarbeiten?
Ich brauch das um schauen ob die einzelnen Felder gesetzt sind oder nicht, unabhängig davon was für ein Set das ist.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:25
Du könntest es intern nach "set of byte" casten, mein erster Ansatz wäre so:
Delphi-Quellcode:
type
  TByteSet = set of byte;

procedure DoSomethingWithAnySet(const ASet);
begin
  if 3 in TByteSet(ASet) then
  begin
    ...
  end;
end;
Dabei werden die Elemente von 0 ausgehend nummeriert. Also kannst du in deinem Beispiel das "a" in TMyClass1 und das "e" in TMyClass2 nicht auseinander halten.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:27
Wenn mans gern kompliziert mag, kann man auch einen Pointer/typenlosen Parameter übergeben und dann den Bitvektor verarbeiten.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 14:40
Zitat von Flocke:
Du könntest es intern nach "set of byte" casten, mein erster Ansatz wäre so:
Delphi-Quellcode:
type
  TByteSet = set of byte;

procedure DoSomethingWithAnySet(const ASet);
begin
  if 3 in TByteSet(ASet) then
  begin
    ...
  end;
end;
Dabei werden die Elemente von 0 ausgehend nummeriert. Also kannst du in deinem Beispiel das "a" in TMyClass1 und das "e" in TMyClass2 nicht auseinander halten.
klingt gut, werd ich testen sobald ich daheim bin
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 15:06
Delphi-Quellcode:
type
TMyClass1 = (a,b,c,d);
TMyClass2 = (e,f,g,h);
TMySet1 = set of TMyClass1;
TMySet2 = set of TMyClass2;
probiere das mal

Delphi-Quellcode:
type
  TMyClass = (a,b,c,d, e,f,g,h);
  TMySet = set of TMyClass;

const
  Set1: TMySet = [a,b,c,d];
  Set2: TMySet = [e,f,g,h];

var
  Set: TMySet;
begin
  if Set * Set1 <> [] then ;
  
end;
Statt also 2 Set zu deklarieren benutzt du nur eine gemeinsamme Menge als Gesamtmenge und dann rechnest du intern mit konstanten Intersections = Teilmengen. Das dürfte konzeptionell sauberer sein, auch performanter und zudem noch Speicher sparender

2 Sets mit 4 Elementen benötigen 2 * 1 Byte und pro Byte werden nur 2 Bits verbraucht -> 2^2 = 4. Bei einem Set mit 8 Elementen braucht man 3 Bits = 2^3 = 8 ergo nur 1 Byte Speicher.

Gruß Hagen
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 19:34
ich soll für mein kleines RPG anstatt dem:

Delphi-Quellcode:
TWaffentyp = (wSchwert,wAxt,wStab,wPeitsche,wBogen,wArmbrust,wFlinte,wSpeer);
TSchadenstyp = (sSchnitt,sSchlag,sStich,sSchuss);
TZaubertyp = (zFeuer,zWasser,zErde,zWind,zBlitz,zEis,zLicht,zDunkelheit);
TRassen = (rMensch,rZwerg,rElf,rDunkelelf,rOrk,rTroll);
das hier machen?

Delphi-Quellcode:
TMegaMultiAllroundTyp = (wSchwert,wAxt,wStab,wPeitsche,wBogen,wArmbrust,wFlinte,wSpeer,
 sSchnitt,sSchlag,sStich,sSchuss,
 zFeuer,zWasser,zErde,zWind,zBlitz,zEis,zLicht,zDunkelheit,
 rMensch,rZwerg,rElf,rDunkelelf,rOrk,rTroll)
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 19:50
Was genau soll denn in der Prozedur geschehen? Ich wette, es gibt eine bessere Lösung.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#10

Re: verschiedene Sets an Prozedur übergeben

  Alt 5. Sep 2006, 20:00
das Problem was in der Prozedur passiert ist Thema in nem andern Thread.

Also:
ich möchte quasi den Spielstand speichern. Das ganze wird ein Onlinegame.

also ich habe sowas:

Delphi-Quellcode:
TMyTyp = (tTyp1,tTyp2,tTyp3,tTyp4,...,tTypn);
TMySet = set of TMyTyp;
an die Prozedur will ich jetzt das Set übergeben und in ein Integer verwandeln.
Dabei hat der erste teil den Wert 1, der zweite 2, der dritte 4, der vierte 8 usw.
jetzt schau ich welches der Teile gesetzt ist und bekomm so eine zahl die ich an mein skript schicken kann, in die Datenbank schreiben, wieder auslesen und wieder zurück in das Set wandeln kann.

ich find das schon relativ einfach, die Prozedur habe ich soweit, allerdings muss ich die eben für jedes Set schreiben und da ich ein fauler mensch bin ( ) möcht ich EINE Prozedur die jedes meiner Sets verarbeiten kann
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:28 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