與我的最後question,現在我有以下問題:演員的接口類型
function TNodeFactory <T>.CreateNode (ID : Integer) : INodeInterface <T>;
var
NodeClass : TClass;
begin
NodeClass := FindRegisteredClass (ID);
Result := NodeClass.Create;
end;
這將產生一個編譯器錯誤:
E2010 Incompatible Types: 'INodeInterface<TNodeFactory<T>.T>' and 'TObject'
一投沒有工作過。
我在這裏錯過了什麼?
編輯:當前實現
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;
(簡體和刪除錯誤檢查)
結點類別是TClass。如果您創建NodeClass,它將僅僅是一個TObject,而不是一個INodeInterface。你將不得不向我們展示你的RegisterClass和FindRegisteredClass的實現。 – 2009-08-06 07:48:20
添加實現到我的問題 – jpfollenius 2009-08-06 07:59:24
您可以嘗試*結果:= TInterfacedObject(RegisteredType.NodeClass)。創建爲INodeInterface * – 2009-08-06 08:04:41