使用代码模板链接到本节
template链接到本节
template
节点注册了一个可用于在扩展生成的代码时避免重复代码的模板,它是 typesystem 节点的子节点。
<typesystem>
<template name="my_template">
// the code
</template>
</typesystem>
请使用 insert-template
节点将模板代码(通过模板的 name
属性标识)插入到生成的代码库中。
insert-template链接到本节
insert-template
节点包含通过名称属性标识的代码模板,它可以成为 inject-code、conversion-rule 或 template 节点的子节点。
<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 模板。
原始类型模板
名称 |
描述 |
|
将 PyLong 转换为 C++ 类型 |
容器类型模板
某些容器类型是 内置的。如果需要显式指定,可以使用以下模板:
|
将 PySequence 转换为 C++ pair (std::pair/QPair) |
|
将 C++ pair (std::pair/QPair) 转换为 PyTuple |
|
将 C++ 顺序容器转换为 PyList |
|
将 C++ 顺序容器转换为 PySet |
|
将一个可迭代Python类型转换为C++顺序容器(STL/Qt) |
|
将一个可迭代Python类型转换为支持reserve()的C++顺序容器 |
|
将一个可迭代Python类型转换为固定大小的数组(std::array,std::span) |
|
将一个PySequence转换为C++集合类型容器(std::set/QSet) |
|
将std::map/std::unordered_map转换为PyDict |
|
将QMap/QHash转换为PyDict |
|
将PyDict转换为std::map/std::unordered_map |
|
将PyDict转换为QMap/QHash |
|
将std::multimap转换为值列表PyDict |
|
将QMultiMap转换为值列表PyDict |
|
将std::unordered_multimap转换为值列表PyDict |
|
将QMultiHash转换为值列表PyDict |
|
将值列表PyDict转换为std::multimap/std::unordered_multimap |
|
将值列表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>