转换规则标签#
conversion-rule#
conversion-rule 标签指定如何将 原始类型、容器类型 或 值类型 从原生 C++ 语言类型转换为目标语言类型以及反向转换(参见用户定义类型转换)。
它是 container-type)、primitive-type 或 value-type 的子节点,并且可以包含 native-to-target 或 native-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
还支持 file
和 snippet
属性(参见 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
标签中一样。
还支持 file
和 snippet
属性(参见 inject-code 节点)。