데이터 형식 템플릿 상속

데이터 형식 템플릿은 이전에 정의된 데이터 형식 템플릿에서 속성을 상속할 수 있습니다. 기본 템플릿에 적합한 인식된 모든 속성이 상속됩니다. 상속된 속성은 파생 템플릿에서 다시 정의할 수 없습니다.

파생 템플릿은 원하는 수준으로 다른 템플릿에 의해 상속될 수 있습니다. 상속할 템플릿을 지정하려면 *Inherits 지시문을 사용하여 이름을 지정하면 됩니다. 기본 템플릿은 데이터 형식 템플릿이어야 합니다.

기본 템플릿으로 작동하는 템플릿을 완전히 정의할 필요는 없습니다. *Virtual: TRUE 지시문은 템플릿을 부분적으로 정의할 수 있음을 파서에 알리는 데 사용됩니다. (그러나 기본 템플릿에는 *DataType 지시문이 포함되어야 합니다.) 파생 템플릿은 데이터 형식의 정의를 완료할 수 있습니다. 파생 템플릿이 데이터 형식의 정의를 완료할 수 없는 경우 가상으로 명시적으로 선언해야 합니다. 가상 지시문은 상속되지 않습니다. *ElementType 또는 *ValueType 지시문을 사용하여 가상 템플릿을 참조할 수 없습니다. *Inherits 지시문을 통해서만 참조할 수 있습니다.

참고 *ElementType 지시문이 COMPOSITE 데이터 형식으로 제공될 때 누락된 경우 파서 필터는 *ArraySize 지시문의 기본값을 자동으로 만듭니다. 따라서 *ArraySize*ElementType 앞에 정의할 수 있지만(이후에 *ElementType을 정의하는 템플릿에서 상속되는 템플릿에서 *ArraySize를 정의하여) 역방향은 허용되지 않습니다(즉, *ArraySize 전에 *ElementType을 정의할 수 없음).

스키마

불완전한 데이터 형식 템플릿에 대한 스키마는 내보내지지 않습니다. 중복 스키마 정의를 방지하기 위해 스키마가 이미 있는 템플릿에서 파생된 템플릿에 대해 스키마가 내보내지지 않습니다. 이 제한은 상속 없이 단일 기본 데이터 형식의 여러 변형이 정의될 경우 발생하는 동일한 기본 데이터 형식의 여러 정의를 제거합니다. 가상 지시문은 스키마를 내보내는지 여부에 영향을 주지 않습니다. 평균 사용자는 스키마가 내보내지는 시기에 대한 세부 정보를 이해할 필요가 없습니다. 파서 필터는 이 작업을 자동으로 처리합니다.

바인딩

*Inherits: 지시문에서 참조하는 기본 템플릿에서 정의되거나 상속되는 속성은 파생 템플릿에서 직접 상속됩니다. 파생 또는 기본 템플릿이 다른 데이터 형식 템플릿의 *ElementType 지시문 또는 특성 템플릿의 *ValueType 지시문에 의해 참조되면 명명된 템플릿이 바인딩됩니다. 구문 템플릿의 멤버를 바인딩하는 데 사용되는 것과 같은 복잡한 바인딩 알고리즘은 없습니다. 값에 간접 바인딩을 구현하는 데 필요한 이름 또는 인스턴스 이름이 없으므로 이러한 알고리즘은 의미가 없습니다.

예제

데이터 형식 상속은 여러 데이터 형식 템플릿에 공통적인 속성을 제외하는 데 사용됩니다. 다음 예제에서 기본 템플릿은 여러 배열 데이터 형식에 공통적인 속성을 정의합니다. 두 가지 수준의 상속이 사용됩니다.

*Template:  GENERIC_ARRAY  *%  Basemost Template
{
    *Type:  DATATYPE
    *Virtual:  TRUE
    *DataType:   ARRAY
    *RequiredDelimiter: ","
    *OptionalDelimiter: "<20 09>"
}
*Template:  LIST_OF_TYPE  *%  first level derived Template
{
    *Inherits:  GENERIC_ARRAY
    *ArrayLabel: "LIST"
    *ArraySize: [*]
    *Virtual:  TRUE
}

*Template:  DT_INT_ARRAY  *%  first level derived Template
{
    *Inherits:  GENERIC_ARRAY
    *ElementType:  INTEGER
    *Virtual:  TRUE
}

*% ===================
*%  Second-level templates derived from LIST_OF_TYPE
*% ===================

*Template:  COLORS_LIST  
{
    *Inherits:  LIST_OF_TYPE
    *ElementType:  COLORS
    *ElementTags: (colors)
}
*Template:  STD_VAR_LIST
{
    *Inherits:  LIST_OF_TYPE
    *ElementType:  STD_VAR
    *ElementTags: (Standard_Variable)
}

*% ===================
*%  Second-level templates derived from DT_INT_ARRAY
*% ===================

*Template:  DT_POINT
{
    *Inherits:  DT_INT_ARRAY
    *ArrayLabel: "POINT"          
    *ElementTags: (X_pos, Y_pos)
    *ArraySize: 2
}
*Template:  DT_PAIR_OF_INTS
{
    *Inherits:  DT_INT_ARRAY
    *ArrayLabel: "PAIR"
    *ElementTags: (width, height)
    *ArraySize: 2
}
*Template:  RECTANGLE
{
    *Inherits:  DT_INT_ARRAY
    *ArrayLabel: "rect"
    *ElementTags: (left, top, right, bottom)
    *ArraySize: 4
}