数据类型模板继承

数据类型模板可以从以前定义的数据类型模板继承属性。 将继承适用于基本模板的所有已识别属性。 无法在派生模板中重新定义继承的属性。

派生模板可由其他模板继承到所需的任何级别。 若要指定要从其继承的模板,只需使用 *Inherits 指令对其进行命名。 基模板必须是数据类型模板。

无需完全定义用作基本模板的模板。 *Virtual: TRUE 指令用于通知分析程序可以部分定义模板。 (最基础模板必须包含 *DataType 指令。) 派生模板随后可以完成数据类型的定义。 如果派生模板无法完成数据类型的定义,则必须将自身显式声明为 Virtual不继承 Virtual 指令。 不能使用 *ElementType*ValueType 指令引用虚拟模板。 只能通过 *Inherits 指令引用它们。

注意如果在 COMPOSITE 数据类型中提供 *ElementType 指令时缺失 ,分析程序筛选器会自动为 *ArraySize 指令创建默认值。 因此,可以在 *ElementType (之前定义 ArraySize,方法是在随后由定义 *ElementType) 的模板继承的模板中定义 *ArraySize,但不允许反向定义, (即,无法在 *ArraySize) 之前定义 *ElementType。

架构

不会为不完整的数据类型模板发出架构。 为了避免冗余架构定义,不会为派生自已有架构的模板的模板发出架构。 此限制消除了同一基元数据类型的多个定义,如果在没有继承帮助的情况下定义单个基元数据类型的多个变体,则会导致这些定义。 Virtual 指令不会影响是否发出架构。 普通用户不需要了解何时发出架构的详细信息。 分析程序筛选器会自动处理此问题。

绑定

由 *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
}