![]() |
Generics T:=NIL Problem?
Hallo Zusammen!
Ich wollte eine TThreadlist erweiter, da ich das herausholen eines Items etwas unhandlich finden. Schön wäre gewesen:
Delphi-Quellcode:
Leider liefert das eine Exception, wenn die Liste leer ist, da ITEM[0] zugegriffen wird.
var
Que : TThreadList<IFoo>; Foo : IFoo; begin Foo := Que.Locklist.First; // Schade try Foo.Whatever; finally Que.Unlocklist; end; end; Also eine kleine Ableitung
Delphi-Quellcode:
Frage: Wie kann ein "T" initialisieren?
type
TMyThreadQue<T> = class(TThreadList<T>) Public Function PopElement(Var LCommand:T):boolean; end; function TMyThreadQue<T>.PopElement(var LCommand: T): boolean; var CList : TList<T>; begin CList := LockList; try if CList.Count > 0 then begin Result := true; LCommand := CList.First; CList.Remove(LCommand); end else begin Result := false; LCommand := NIL; // Wie geht das hier? end; finally UnlockList; end; end; Oder habe ich da einen Denkfehler? Grüsse Mavarik |
AW: Generics T:=NIL Problem?
Wenn alle deine möglichen T's auf Objekte beschränkt sind dann indem du
Delphi-Quellcode:
definierst.
TMyThreadQue<T : class> = class(TThreadList<T>)
|
AW: Generics T:=NIL Problem?
Stichwort "Constraints". Alternativ:
Delphi-Quellcode:
LCommand := Default( T );
|
AW: Generics T:=NIL Problem?
In Java löst man solche Probleme meist mit einer Factory, in C++ funktioniert da mit Templates problemlos :stupid:
Allgemein ließe sich das umgehen, indem du
Delphi-Quellcode:
weglässt und den Parameter mit dem Defaultwert initialisierst oder einfach den Rückgabewert zuerst auswertest:
LCommand := NIL; // Wie geht das hier?
Delphi-Quellcode:
var
Que : TThreadList<IFoo>; Foo : IFoo; begin //Foo := nil; if Que.popElement(Foo) then begin try Foo.Whatever; finally Que.Unlocklist; end; end; end; |
AW: Generics T:=NIL Problem?
Zitat:
Ich gehe davon aus, dass ein Default(Foo) = NIL ist? // Also Default(IInterface) = NIL Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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 by Thomas Breitkreuz