AGB  ·  Datenschutz  ·  Impressum  







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

Generic Graph class

Ein Thema von bernhard_LA · begonnen am 30. Jan 2015 · letzter Beitrag vom 8. Feb 2015
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Generic Graph class

  Alt 30. Jan 2015, 20:55
die aktuelle Verion meiner Graphen Klasse incl. Generic#s sieht wie folgt aus

Delphi-Quellcode:
  TNetGraph<T> = Class

  public

    fList : TNetList;
    G: TGraph<T>;

    constructor create(g_type: TGraphEdgeMode = normal_directed);
    destructor destroy; override;

    function GetNetitem(aData: T): TNetItem;


function TNetGraph<T>.GetNetitem(aData: T): TNetElement;
begin

  if (T(adata) is integer) then
       result := fList.Items[integer(T(aData))] /// geht so nicht :-(
  end;
 
end;
...
 End;

ich scheitere an einer Abfrage um welchen Datentypen es sich bei aData handelt und dem entsprechende auf den ZUgriff in meine Liste fList zu reagieren.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generic Graph class

  Alt 30. Jan 2015, 23:28
Erst mal fällt mir auf, dass in Deiner Klassendefinition die Fuktion "GetNetItem" als Result "TNetItem" hat, in der Implementation aber "TNetElement".

Den Typ für aData, bzw. "T" kannst Du so abfragen:

Delphi-Quellcode:
if (GetTypeName (Typeinfo (T)) = 'Integer') then begin
  ...
end;
Den Integerwert selbst kannst Du so ermitteln:

  result := fList[PInteger (@adata)^];
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Generic Graph class

  Alt 31. Jan 2015, 09:55
T kann als Datentyp alles mögliche sein , wenn ich als "integer type" definiere kann ich mit


flist.Items[data] direkt zugreifen.


Mir wäre ein Vergleich auf den Datentyp selbst am liebsten . Udn nochbesser ein case Statement in diesem Form



Delphi-Quellcode:
    case data as Datatype of
    integer:
    TMyCustomDataType_1 :
        begin
        ...
        end;
     TMyCustomDataType_2 :
     TMyCustomDataType_3 :
    else
     end;

geht soetwas mit Delphi ?



Alternative Ziel Option mit if Statement


Delphi-Quellcode:
  if data is integer then
      begin

      end;
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Generic Graph class

  Alt 31. Jan 2015, 10:17
Da ein case-Statement eigentlich immer ein Zeichen für suboptimales Klassendesign ist...erkläre doch mal, was in den anderen Fällen erfolgen soll, wenn also T kein Integer ist.

Bei einem TNetGraph<Integer> soll GetItems(3) also das 3. Element der Liste liefern.
Was soll bei einem TNetGraph<String> denn ein Aufruf von GetItems('Foo') liefern?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#5

AW: Generic Graph class

  Alt 31. Jan 2015, 16:27
Wenn es denn sein muss, geht es auch mit case:

Delphi-Quellcode:
  case PTypeInfo(TypeInfo (T)).kind of
    tkInteger: ShowMessage ('Integer hier');
    tkFloat: ShowMessage ('Float hier');
    tkWString: ShowMessage ('String hier');
  end;
Wenn Du auf eingene Klassen oder Interfaces prüfen willst, musst Du eben auf tkClass oder tkInterface prüfen und dann noch mal näher unterscheiden, worum es sich genau handelt.

Die Info, was unter "kind" alles fällt, ist im TTypeKind in der Unit "System.TypInfo" beschrieben.

Geändert von Harry Stahl (31. Jan 2015 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Generic Graph class

  Alt 1. Feb 2015, 17:36
Ab XE7 empfehle ich, GetTypeKind(T) zu nutzen. Das evaluiert der Compiler direkt und entfernt somit nicht ausgeführte Codepfade.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:04 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