转换规则标签#

conversion-rule#

conversion-rule 标签指定如何将 原始类型容器类型值类型 从原生 C++ 语言类型转换为目标语言类型以及反向转换(参见用户定义类型转换)。

它是 container-type)、primitive-typevalue-type 的子节点,并且可以包含 native-to-targetnative-to-target 子节点。

<value-type>
    <conversion-rule>
        <native-to-target>
        // Code to convert a native value to a target language object.
        </native-to-target>
        <target-to-native>
            <add-conversion type='TARGETTYPEA' check='TARGETTYPEA_CHECK(%in)'>
            // Code to convert target language type object of type TARGETTYPEA
            // to the C++ native type represented by the value/primitive/container-type.
            </add-conversion>
            <add-conversion type='TARGETTYPEB' check='TARGETTYPEB_CHECK(%in)'>
            // Code to convert target language type object of type TARGETTYPEB
            // to the C++ native type represented by the value/primitive/container-type.
            </add-conversion>
        </target-to-native>
    </conversion-rule>
</value-type>

代码可以直接插入,通过 add-conversion(提供代码片段功能)或通过 insert-template(XML 模板,参见 使用代码模板)。

上面的例子展示了完整转换规则的结构。下面各节中都描述了构成转换规则的每个子标签。

注意

您还可以使用 conversion-rule 节点来指定自定义代码以在目标语言和 C++ 之间转换函数参数(参见 conversion-rule)。

native-to-target#

native-to-target 标签说明如何将原生 C++ 值转换为等价的目标语言值。它是 conversion-rule 节点的子节点。该标签内的文本是一个 C++ 代码片段,它接受输入值并将其转换为输出值所需的操作。可以使用 insert-template 标签插入经常重复的代码。

<conversion-rule>
    <native-to-target>
    // Code to convert a native value to a target language object.
    </native-to-target>
</conversion-rule>

使用替换节点来修改模板代码。请注意,生成器必须为输入、输出值和类型提供类型系统变量,即 %in%out%INTYPE%OUTTYPE。在容器类型的情况下,%INTYPE 指的是完整的容器类型(例如,“list”),并且应将 %INTYPE_0%INTYPE_1%INTYPE_# 替换为容器模板中使用的类型(例如,%INTYPE_0 对应于为 “list” 的 “int”)。

还支持 filesnippet 属性(参见 inject-code 节点)。

目标到原生#

目标到原生 标签包含至少一个,但通常很多,从目标语言值到 C++ 原生值的转换。它是 转换规则 节点的子节点,并且可能有一个或多个 添加转换 子节点。可选属性 replace 表示是否将目标语言到 C++ 的转换添加到,或替换由 ApiExtractor 收集的隐式转换。其默认值是 yes

<conversion-rule>
    <target-to-native replace='yes|no'>
    // List of target to native conversions meant to replace or expand
    // the already existing implicit conversions.
    </target-to-native>
</conversion-rule>

add-conversion#

每个 添加转换 标签为将目标语言类型(由 type 属性指示)转换为 C++ 原生类型添加一条规则,该类型由 基本类型容器类型值类型 表示,这些类型是父 转换规则 所属。它是在 目标到原生 节点的子节点。

<target-to-native>
    <add-conversion type='TARGETTYPE' check='TARGETTYPECHECK(%in)'>
    // Code to convert target language type object of type TARGETTYPE_A
    // to the C++ native type represented by the value/primitive/container-type.
    </add-conversion>
<target-to-native>

check 属性表示如何检查目标值以确定它是否属于预期的类型。此属性是可选的,因为它可以由 type 属性派生,但偶尔可能需要特殊检查。变量 %in%out%INTYPE%INTYPE_#%OUTTYPE 必须由生成器提供,正如在 native-to-target 标签中一样。

还支持 filesnippet 属性(参见 inject-code 节点)。