2017-04-06 1 views
3

を作成した場合、一般的な型チェックは、私は次のクラス定義Delphiは -

TBase<T> = class 
    public 
    class var Inst: T; 
    class function GetClone: T; 
    end; 

を持っていると私は、クラスのvarインストが割り当てられているかどうかを確認します。

class function TBase<T>.GetClone: T; 
begin 
if TBase<T>.Inst = nil then //- error here. Trying with Assigned(TBase<T>.Inst) is also nor recognized. 
    TBase<T>.Inst := TBase<T>.Create; 
end; 

クラス変数が割り当てられているかどうかを確認するにはどうすればよいですか?

+1

「T」とは何ですか?クラスの場合は、制約を追加できます。 –

答えて

3

nilを確認するには、汎用パラメータを制約する必要があります。たとえば:あなたはnilを確認することができるように

TBase<T: class> = class //... 

その方法Tは、TObjectまたはそれの任意の子孫でなければなりません。

制限なしTは、integerまたはnilをサポートしないその他の値の型にすることができます。

+0

クラスでTObjectを変更すると、それを回答として受け入れます。 – RBA

+0

'T'が実際にはパラメータなしの' Create() 'コンストラクタを実装していることを確認するには、[' constructor'制約(http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics#Constructor_Constraints) = class // ... ' –