2009-09-09 5 views
3

Delphi 2010에서 정적 다형성을 구현하는 방법이 있습니까?Delphi의 정적 다형성

+0

C++ 템플릿과 같은 것을 의미한다면 - 어떻게 유닛 개념에 맞을까요? 인터페이스 섹션에 코드를 허용 하시겠습니까? – mghie

+0

단위 개념이 C++ 템플릿의 일부 기능에만 어떻게 간섭하는지 이해할 수 없습니다. 사실 나는 가능한 모든 C++ 템플릿 기능을 가지고 싶습니다 (제네릭과 템플릿이 다르다는 것을 알고 있습니다).하지만 델파이 컴파일러가 제네릭 인스턴스화 후에 제네릭 매개 변수로 표현식을 확인하면 지금은 저에게 충분할 것입니다. 예를 들어, T가 generic 매개 변수 일 때 "컴파일러 오류"를보고 싶지 않고 구체적인 유형으로이 generic을 사용하기 전에 T.do_some()을 호출하려고합니다. – valentyn

+0

물론 T가 제약을받지 않는 경우 컴파일러 오류가 발생합니다. 컴파일러는 do_some 메서드가 있는지 어떻게 알 수 있습니까? 이것은 제약 조건입니다 ... – jpfollenius

답변

6

정적 다형성 델파이 수 없습니다 (질문을 다시 읽기, 어쨌든 D2010을 사용하는 것); 제네릭은 템플릿이 아닙니다. 템플리트와 달리 generics는 인스턴스화시가 아니라 선언시에 구문 분석됩니다. 그런 이유로 컴파일 된 모듈 (* .dcu)은 일반 엔티티의 AST 표현 만 포함하면되고 인스턴스화되지 않은 C++ 템플릿 선언에서 AST를 작성하는 것은 거의 불가능합니다.

3

델파이 2009에는 제네릭이 있습니다. 클래스 또는 인터페이스 제약과 함께 정적 폴리모픽을 구현하는 데 사용할 수 있습니다. 델파이 2010을 사용 고려할 수 있도록

불행하게도, 델파이 2009 년 제네릭 지원은 매우 버그가

+0

generics의 클래스 또는 인터페이스 제약 조건은 vmt가 (런타임 오버 헤드) 사용되며 이는 여전히 동적 다형성을 의미합니다. 그렇지 않니? – valentyn

+0

런타임 오버 헤드는 최소한이어야합니다 (1 어레이 조회). 왜 결국 차이가 있습니까? – jpfollenius

+1

배열 조회 및 프로 시저 호출이라고 생각합니다. 동일한 가상 함수 호출 오버 헤드. 따라서 "동적 다형성이있는 경우 정적 다형성을 사용해야하는 이유"와 동일한 질문입니다. 거대한 횟수로 반복 할 때 차이가 나는 것 같아요. 어쨌든 내가 호출 할 함수 (또는 호출하지 않음)에 대한 컴파일 타임의 지식을 가지고있을 때 런타임에 그것을 지불해야하는 이유는 무엇인가. – valentyn