使用代码模板链接到本节

template链接到本节

template 节点注册了一个可用于在扩展生成的代码时避免重复代码的模板,它是 typesystem 节点的子节点。

<typesystem>
    <template name="my_template">
        // the code
    </template>
</typesystem>

请使用 insert-template 节点将模板代码(通过模板的 name 属性标识)插入到生成的代码库中。

insert-template链接到本节

insert-template 节点包含通过名称属性标识的代码模板,它可以成为 inject-codeconversion-ruletemplate 节点的子节点。

<inject-code class="target" position="beginning">
    <insert-template name="my_template" />
</inject-code>

请使用 replace 节点来修改模板代码。

replace链接到本节

replace 节点允许您在将模板代码插入到生成的代码之前修改它,并且它可以成为 insert-template 节点的子节点。

<insert-template name="my_template">
   <replace from="..." to="..." />
</insert-template>

此节点将用 to 指向的值替换属性 from

预定义模板链接到本节

Shiboken内置了多个用于转换 STL 和 Qt 类型的 XML 模板。

原始类型模板

名称

描述

shiboken_conversion_pylong_to_cpp

将 PyLong 转换为 C++ 类型

容器类型模板

某些容器类型是 内置的。如果需要显式指定,可以使用以下模板:

shiboken_conversion_pysequence_to_cpppair

将 PySequence 转换为 C++ pair (std::pair/QPair)

shiboken_conversion_cpppair_to_pytuple

将 C++ pair (std::pair/QPair) 转换为 PyTuple

shiboken_conversion_cppsequence_to_pylist

将 C++ 顺序容器转换为 PyList

shiboken_conversion_cppsequence_to_pyset

将 C++ 顺序容器转换为 PySet

shiboken_conversion_pyiterable_to_cppsequentialcontainer

将一个可迭代Python类型转换为C++顺序容器(STL/Qt)

shiboken_conversion_pyiterable_to_cppsequentialcontainer_reserve

将一个可迭代Python类型转换为支持reserve()的C++顺序容器

shiboken_conversion_pyiterable_to_cpparray

将一个可迭代Python类型转换为固定大小的数组(std::array,std::span)

shiboken_conversion_pyiterable_to_cppsetcontainer

将一个PySequence转换为C++集合类型容器(std::set/QSet)

shiboken_conversion_stdmap_to_pydict

将std::map/std::unordered_map转换为PyDict

shiboken_conversion_qmap_to_pydict

将QMap/QHash转换为PyDict

shiboken_conversion_pydict_to_stdmap

将PyDict转换为std::map/std::unordered_map

shiboken_conversion_pydict_to_qmap

将PyDict转换为QMap/QHash

shiboken_conversion_stdmultimap_to_pydict

将std::multimap转换为值列表PyDict

shiboken_conversion_qmultimap_to_pydict

将QMultiMap转换为值列表PyDict

shiboken_conversion_stdunorderedmultimap_to_pydict

将std::unordered_multimap转换为值列表PyDict

shiboken_conversion_qmultihash_to_pydict

将QMultiHash转换为值列表PyDict

shiboken_conversion_pydict_to_stdmultimap

将值列表PyDict转换为std::multimap/std::unordered_multimap

shiboken_conversion_pydict_to_qmultihash

将值列表PyDict转换为QMultiMap/QMultiHash

使用这些模板,类型std::list的条目看起来像这样

<container-type name="std::list" type="list">
    <include file-name="list" location="global"/>
    <conversion-rule>
        <native-to-target>
            <insert-template name="shiboken_conversion_cppsequence_to_pylist"/>
        </native-to-target>
        <target-to-native>
            <add-conversion type="PySequence">
                <insert-template name="shiboken_conversion_pyiterable_to_cppsequentialcontainer"/>
            </add-conversion>
        </target-to-native>
    </conversion-rule>
</container-type>