Conversion Rule Tag¶
conversion-rule¶
The conversion-rule tag specifies how a primitive-type, a container-type, or a value-type may be converted to and from the native C++ language types to the target language types (see also User Defined Type Conversion).
It is a child of the container-type, primitive-type or value-type and may contain native-to-target or native-to-target child nodes.
<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>The code can be inserted directly, via add-conversion (providing snippet functionality) or via insert-template (XML template, see Using Code Templates).
The example above show the structure of a complete conversion rule. Each of the child tags comprising the conversion rule are described in their own sections below.
Note
You can also use the
conversion-rule
node to specify customized code to convert a function argument between the target language and C++ (see conversion-rule).
native-to-target¶
The native-to-target tag tells how to convert a native C++ value to its target language equivalent. It is a child of the conversion-rule node. The text inside the tag is a C++ code the takes an input value an does what’s needed to convert it to the output value. insert-template tags may be used to insert commonly repeating code.
<conversion-rule> <native-to-target> // Code to convert a native value to a target language object. </native-to-target> </conversion-rule>Use the replace node to modify the template code. Notice that the generator must provide type system variables for the input and output values and types, namely %in, %out, %INTYPE and %OUTTYPE. In the case of container types, %INTYPE refers to the full container type (e.g. “list<int>”) and %INTYPE_0, %INTYPE_1, %INTYPE_#, should be replaced by the types used in the container template (e.g. %INTYPE_0 correspondes to “int” for “list<int>”).
The
file
andsnippet
attributes are also supported (see inject-code nodes).
target-to-native¶
The target-to-native tag encloses at least one, but usually many, conversions from target language values to C++ native values. It is a child of the conversion-rule node and may have one or several add-conversion child nodes. The optional attribute
replace
tells if the target language to C++ conversions will be added to, or if they will replace the implicit conversions collected by ApiExtractor. The default value for it is 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¶
Each add-conversion tag adds a rule for conversion of a target language type, indicated by the
type
attribute, to the C++ native type represented by the primitive-type, a container-type, or value-type, to which the parent conversion-rule belongs. It is a child of the target-to-native node.<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>The
check
attribute tells how a target value should be checked to see if it belongs to the type expected. This attribute is optional, for it can be derived from thetype
attribute, but it isn’t unusual that some special check is needed. The variables %in, %out, %INTYPE, %INTYPE_#, and %OUTTYPE, must be provided by the generator as in thenative-to-target
tag.The
file
andsnippet
attributes are also supported (see inject-code nodes).
© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.