CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
44 lines
1.5 KiB
ReStructuredText
44 lines
1.5 KiB
ReStructuredText
.. _type-conversions:
|
|
|
|
Type conversions
|
|
################
|
|
|
|
Apart from enabling cross-language function calls, a fundamental problem
|
|
that a binding tool like pybind11 must address is to provide access to
|
|
native Python types in C++ and vice versa. There are three fundamentally
|
|
different ways to do this—which approach is preferable for a particular type
|
|
depends on the situation at hand.
|
|
|
|
1. Use a native C++ type everywhere. In this case, the type must be wrapped
|
|
using pybind11-generated bindings so that Python can interact with it.
|
|
|
|
2. Use a native Python type everywhere. It will need to be wrapped so that
|
|
C++ functions can interact with it.
|
|
|
|
3. Use a native C++ type on the C++ side and a native Python type on the
|
|
Python side. pybind11 refers to this as a *type conversion*.
|
|
|
|
Type conversions are the most "natural" option in the sense that native
|
|
(non-wrapped) types are used everywhere. The main downside is that a copy
|
|
of the data must be made on every Python ↔ C++ transition: this is
|
|
needed since the C++ and Python versions of the same type generally won't
|
|
have the same memory layout.
|
|
|
|
pybind11 can perform many kinds of conversions automatically. An overview
|
|
is provided in the table ":ref:`conversion_table`".
|
|
|
|
The following subsections discuss the differences between these options in more
|
|
detail. The main focus in this section is on type conversions, which represent
|
|
the last case of the above list.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
overview
|
|
strings
|
|
stl
|
|
functional
|
|
chrono
|
|
eigen
|
|
custom
|