2011-04-14 1 views
10

그것은 우연히 단지였다TArray <T> .Create() 어딘가에 기록되어 있습니까? 나는이 같은 구조가 실제로 컴파일하고 원하는 결과를 생산하고 있음을 알았을 때

var 
    Arr: TArray<Integer>; 
begin 
    Arr := TArray<Integer>.Create(100, 101, 102); 
end; 

내가 델파이 XE에서 그것을 테스트,하지만 너무 오래된 버전에서 작동 할 수 있습니다. 이것이 어딘가에 기록되어 있습니까?

+0

또한 Delphi 2010에서 작동하며 컴파일러 - 마술 인 것 같습니다. [Embarcadero documentation here] (http://docwiki.embarcadero.com/VCL/XE/en/Generics.Collections.TArray)는 TArray 이'Generics.Collections'에서 왔지만 uses 절에 포함시키지 않고 작동한다고 말합니다. Generics.Collections의 소스 코드는 어떤 종류의 생성자에 대한 참조도하지 않습니다. –

+3

'TArray '은'System.pas'에서'array of '로 선언되었습니다. 'Generics.Collection'은 검색과 정렬을위한 몇 가지 일반적인 클래스 메소드를 제공하는 TArray를 선언합니다. –

답변

12

language guide에 설명되어 있습니다.

+0

그 당시에는 사실일지도 모르지만 지금은 그렇지 않습니다. (0122). – jep

+0

@jep 아니요, 오늘도 여전히 있습니다 : * 동적 배열에 메모리를 할당하는 방법은 입니다. 배열 컨스트럭터를 호출하십시오. * –

+0

Ah , 알았어, 그게 네가 말한거야. 나는 당신이 짧은 예제와 그 라인을 설명으로 삼고 있다고 생각했습니다. 나는 그것이 최소한의 종류의 문서 일 뿐이며 실제로 그 질문에 언급 된 것 이상으로 나아지지 않는다고 생각합니다. 그래도 충분히 기술적으로 "문서화"되어 있습니다. – jep

10

그것은까지 다시 델파이 2007로 작동하는 다음의 일반 버전입니다 :

type 
    TIntArray = array of Integer; 

var 
    MyIntArray: TIntArray; 
begin 
    MyIntArray := TIntArray.Create(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 
    ... 
end; 

드디어 첫 크기를 모른 채 배열을 초기화 할 수있는에 대한 솔루션입니다.

+0

개방형 배열을 지원하지 않으면 서 슬프게도 장애가 있습니다 –

+0

Delphi 2007은 .NET 버전에서 제네릭을 지원합니다. Win32 버전에서는 Delphi 2009를 사용해야합니다. – Johan

+0

@Johan : 제네릭과 D2007에 대해서는 언급하지 않았습니다. ** OP의 코드 스 니펫 **은 D2007에서 게시 된 코드의 일반 버전입니다. :) –

관련 문제