Delphi 2010でジェネリックスの使用を開始しましたが、このコードをコンパイルするときに問題が発生します。
TThreadBase = class( TThread )
...
end;
TThreadBaseList<T: TThreadBase> = class( TObjectList<T> )
...
end;
TDataProviderThread = class( TThreadBase )
...
end;
TDataCore = class( TInterfacedObject, IDataCore )
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
次に、ネストされたプロシージャがあります。
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
そして最後に、TDataCoreクラスのコードでこのネストされたプロシージャを呼び出したいと思います。
MakeAllThreadsActive(FProviders);
しかし、コンパイラーはそれをコンパイルすることを望まず、('<>'括弧は'()'に置き換えられます)と言います:
[DCCエラー]LSCore.pas(494):E2010互換性のないタイプ:'TThreadBaseList(TThreadBase)'および'TThreadBaseList(TDataProviderThread)'
TDataProviderThreadはTThreadBaseの子孫ですが、わかりません。
ハードタイプキャストで修正する必要がありました。
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
コンパイラがこのエラーを言う理由を誰かが知っていますか?