Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi list<datentyp> auch in Delphi möglich? (https://www.delphipraxis.net/138339-list-datentyp-auch-delphi-moeglich.html)

Yakumo500 7. Aug 2009 22:06


list<datentyp> auch in Delphi möglich?
 
Hi,

Ich bin dabei einen C++ Code in Delphi zu übersetzen.
Jetzt habe ich das Problem, dass bei den Variablen der Typ List benutzt wird.

z.B.
Code:
list<NetMessage> mIncoming;   //NetMessage ist eine Struktur   
list<EVENT_MESSAGE> mOutgoing;   //EVENT_MESSAGE ist eine Struktur
Die Strukturen habe ich bereits in Delphi übersetzt; kein Problem.
Aber ich frage mich jetzt ob ich für jede Liste eine neue Klasse schreiben muss?

Geht es nicht einfacher?

himitsu 7. Aug 2009 22:19

Re: list<datentyp> auch in Delphi möglich?
 
in den neueren Delphi-Versionen ja

nennt sich Hier im Forum suchenGenerics

aber bislang hat es noch einige Macken (siehe einige Posts, auch von mir),
was sich aber mit dem letzen Update von Delphi2009 etwas gebessert hat
und SOLL sich angeblich in Delphi2010 (welches demnächst kommt) wesentlich verbessert haben ... mal sehn

Daniel 7. Aug 2009 22:20

Re: list<datentyp> auch in Delphi möglich?
 
Das scheinen typisierte Listen zu sein. Delphi unterstützt diese seit Version 2009, Stichwort "Generics".

Wenn es vorerst "nur" darum geht, weiter zu kommen, nimm doch eine klassische TList, die ist zwar nicht typisiert, aber als allgemeine Liste durchaus brauchbar und Du musst - sofern Du kein Delphi 2009 hast - keine neuen Klassen mit spezialisierten Gettern & Settern schreiben (oder zumindest nicht sofort).

Namenloser 7. Aug 2009 22:25

Re: list<datentyp> auch in Delphi möglich?
 
Gab es nicht auch noch ein Plugin von jbg, dass generics bei einigen Delphiversionen nachrüstet? :gruebel:

mkinzler 8. Aug 2009 07:12

Re: list<datentyp> auch in Delphi möglich?
 
Ja die DlangExtensions, diese waren aber, wenn ich mich erinnere "experimentell"

Yakumo500 8. Aug 2009 13:55

Re: list<datentyp> auch in Delphi möglich?
 
Ich habe mal eine TList ausprobiert. Dabei
habe ich aber gemerkt, dass die Variablen, von denen ich Pointer in die Liste speichere, global sein müssen, was ich nicht sehr prakisch finde.

Deshalb hab ich ein bisschen gesucht und die TClassList gefunden.
Könnt ihr mir ein paar Links posten, die sich mit TClassList beschäftigen?

//Ups hab mich wohl geirrt. Ich dachte bei einer TClassList könnte man eine Klasse festlegen und von diesem Typ sind dann die Items

himitsu 8. Aug 2009 22:04

Re: list<datentyp> auch in Delphi möglich?
 
Zitat:

Zitat von Yakumo500
Dabei
habe ich aber gemerkt, dass die Variablen, von denen ich Pointer in die Liste speichere, global sein müssen, was ich nicht sehr prakisch finde.

du darfst ja auch nicht den Pointer zu der Variable in der Liste speichern, sondern deren Inhalt

falls es sich in der Variable nicht um einen Pointertüp handelt, dann einfach per New speicher reservieren, da den Inhalt rein und dieses in die Liste rein

Die Muhkuh 8. Aug 2009 22:26

Re: list<datentyp> auch in Delphi möglich?
 
Willst Du Objekte in die Listen packen? Wenn ja, bietet sich eine typisierte TObjectList an.

jaenicke 9. Aug 2009 04:59

Re: list<datentyp> auch in Delphi möglich?
 
Eine Möglichkeit ist auch, selbst eine Klasse von TList oder TObjectList abzuleiten, dann müsste man auch nicht casten, wenn man diese neue Liste dann verwendet.

Yakumo500 9. Aug 2009 16:37

Re: list<datentyp> auch in Delphi möglich?
 
Ich habe es jetzt doch mit Generics probiert.

Aber bei dem Folgenden Code bekomme ich einen Fehler:

Delphi-Quellcode:
type
  List<Vartype> = class
  private
    FArray: array of Vartype;
  public
    function IndexOf(Item: Vartype): integer;
  end;

function List<Vartype>.IndexOf(Item: Vartype): integer;
var i: integer;
begin
  for i := 0 to Length(FArray) - 1 do
  begin

    if Item = FArray[i] then                              //<- Hier kommt der Fehler: [DCC Fehler] ListUnit.pas (109): E2015 
                                                           //   Operator ist auf diesen Operandentyp nicht anwendbar
    begin
      Result := i;
      Exit;
    end;
  end;
  Result := -1;
end;
Wie soll ich sonst das Array mit dem Item vergleichen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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