2017-04-06 1 views
3

을 만든 경우 제네릭 형식 검사가 나는 다음과 같은 클래스 정의델파이 -

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을 확인하려면 제네릭 매개 변수를 제한해야합니다. 예를 들어 :

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

그 방법 TTObject 또는 그 후손을해야합니다, 그래서 당신은 nil를 확인할 수 있습니다.

Tinteger이거나 nil을 지원하지 않는 다른 값 유형이 될 수 있습니다.

+0

TObject를 클래스로 수정하면 대답으로 받아 들일 것입니다. – RBA

+0

'T'가 실제로 매개 변수없는'Create()'생성자를 구현하도록하려면 ['constructor' 제약 조건] (http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics#Constructor_Constraints)도 포함시켜야합니다 :'TBase = class // ...' –