AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Überprüfen, ob ein Pointer auf ein Objekt zeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen, ob ein Pointer auf ein Objekt zeigt

Ein Thema von fajac · begonnen am 3. Nov 2009 · letzter Beitrag vom 4. Nov 2009
 
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#1

Überprüfen, ob ein Pointer auf ein Objekt zeigt

  Alt 3. Nov 2009, 13:09
Hallo Experten, folgendes Problem:

Ich möchte eine Listenklasse erstellen, die von TList abgeleitet ist. In allen Methoden, die einen Pointer zur Liste hinzufügen oder einen entfernen, möchte ich, falls es sich bei dem übergebenen Pointer um ein Objekt eines bestimmten Typs handelt, eine Methode davon aufrufen. Zur Überprüfung, ob es sich um diesen Typ handelt, benutze ich den is-Operator.
Diese Liste möchte ich applikationsweit als Ersatz von TList verwenden.

Das funktioniert auch wunderbar, solange die Liste ausschließlich mit Objekten gefüttert wird. Aber wehe, man versucht das mit Zeigern auf Records, dann gibt es eine AV - hier ein Beispiel:

Delphi-Quellcode:
type
  TMyObject = class (TObject) { Der Typ, auf den ich prüfen möchte }
  public
    procedure DoSomething();
  {...}
  end;

  TMyList = class (TList)
  public
    function Add (AItem : Pointer) : Integer; reintroduce;
    {...}
  end;

implementation
  
function TMyList.Add (AItem : Pointer) : Integer;
var
  obj : TObject;
begin
  obj := AItem; { Cast auf TObject, um "is" anwenden zu können }
  if obj is TMyObject then { <== hier schepperts, wenn AItem ein "normaler" Zeiger ist }
    TMyObject (AItem).DoSomething;
  Result := inherited Add (AItem);
end;
Ich bin mir darüber im klaren, dass der Cast auf TObject an sich schon problematisch ist - aber mir fällt keine andere Möglichkeit ein, herauszufinden um was es sich bei dem Pointer handelt. Natürlich könnte man die Exception abfangen und dann davon ausgehen, dass AItem kein Objekt ist, aber das fände ich auch unsauber.
Kann jemand helfen?
  Mit Zitat antworten Zitat
 


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