cpp_core 0.3.0

Utilities for interoperability with C++
Documentation
Utilities for interoperability with C++ See the project's [README](https://github.com/rust-qt/ritual) for more information. The API is not stable yet. Breaking changes may occur in new minor versions. # Pointers `cpp_utils` provides three kinds of pointers: - `CppBox`: owned, non-null (corresponds to C++ objects passed by value) - `Ptr` and `MutPtr`: possibly owned, possibly null (correspond to C++ pointers) - `Ref` and `MutRef`: not owned, non-null (correspond to C++ references) Accessing objects through these pointers is inherently unsafe, as the compiler cannot make any guarantee about the validity of pointers to objects managed by C++ libraries. Unlike Rust references, these pointers can be freely copied, producing multiple mutable pointers to the same object, which is usually necessary to do when working with C++ libraries. Pointer types implement operator traits and delegate them to the corresponding C++ operators. This means that you can use `ptr1 + ptr2` to access the object's `operator+`. Pointer types implement `Deref` and `DerefMut`, allowing to call the object's methods directly. In addition, methods of the object's first base class are also directly available thanks to nested `Deref` implementations. If the object provides an iterator interface through `begin()` and `end()` functions, pointer types will implement `IntoIterator`, so you can iterate on them directly. # Casts The following traits provide access to casting between C++ class types: - `StaticUpcast` safely converts from a derived class to a base class (backed by C++'s `static_cast`). - `DynamicCast` performs a checked conversion from a base class to a derived class (backed by C++'s `dynamic_cast`). - `StaticDowncast` converts from a base class to a derived class without a runtime check (also backed by C++'s `static_cast`). Instead of using these traits directly, it's more convenient to use `static_upcast`, `static_downcast`, `dynamic_cast` helpers on pointer types. The `CastFrom` and `CastInto` traits represent some of the implicit coercions available in C++. For example, if a method accepts `impl CastInto>`, you can pass a `Ptr`, `MutPtr`, `&CppBox`, or even `Ptr` (where `DerivedClass` inherits `SomeClass`). You can also pass a null pointer object (`NullPtr`) if you don't have a value (`Ptr::null()` is also an option but it can cause type inference issues).