Bezug zu meinen letzten question, ich habe jetzt folgendes Problem:Cast von TObject Schnittstelle Typ
function TNodeFactory <T>.CreateNode (ID : Integer) : INodeInterface <T>;
var
NodeClass : TClass;
begin
NodeClass := FindRegisteredClass (ID);
Result := NodeClass.Create;
end;
Dies ergibt einen Compiler-Fehler:
E2010 Incompatible Types: 'INodeInterface<TNodeFactory<T>.T>' and 'TObject'
Ein Abguss nicht arbeiten.
Was fehlt mir hier?
EDIT: Die aktuelle Implementierung
TNodeFactory <T> = class
private
type
TRegisteredNodeType = record
ID : Integer;
NodeClass : TClass;
end;
private
FNodeTypeList : TList <TRegisteredNodeType>
public
procedure RegisterNodeType (ID : Integer; NodeClass : TClass);
function CreateNode (ID : Integer) : INodeInterface <T>;
end;
procedure TNodeFactory <T>.RegisterNodeType (ID : Integer; NodeClass : TClass);
var
RegisteredType : TRegisteredNodeType;
begin
RegisteredType.ID := ID;
RegisteredType.NodeClass := NodeClass;
FNodeTypeList.Add (RegisteredType);
end;
function TNodeFactory <T>.CreateNode (ID : Integer);
var
RegisteredType : TRegisteredNodeType;
begin
for RegisteredType in FNodeTypeList do
if (RegisteredType.ID = ID) then
Exit (RegisteredType.NodeClass.Create);
raise EInvalidNodeType.Create ('No node type with ID ' + IntToStr (ID) + ' registered');
end;
(vereinfachten und entfernt Fehlerprüfungen)
NodeClass ein TClass ist. Wenn Sie NodeClass erstellen, handelt es sich um ein reines TObject, nicht um ein INodeInterface. Sie müssen uns Ihre Implementierung von RegisterClass und FindRegisteredClass zeigen. –
hinzugefügt meine Frage – jpfollenius
Sie könnten versuchen * Ergebnis: = TInterfacedObject (RegisteredType.NodeClass) .Create als INodeInterface * –