Skip to main content

CppLtRef

Struct CppLtRef 

Source
pub struct CppLtRef<'a, T: ?Sized> { /* private fields */ }
Expand description

A CppRef with an associated lifetime. This can be used in place of any CppRef due to a Deref implementation.

Implementations§

Source§

impl<T: ?Sized> CppLtRef<'_, T>

Source

pub fn lifetime_cast(&self) -> CppRef<T>

Extend the lifetime of the returned reference beyond normal Rust borrow checker rules.

Normally, a reference can’t be used beyond the lifetime of the object which gave it to you, but sometimes C++ APIs can return references to global or other longer-lived objects. In such a case you should use this method to get a longer-lived reference.

§Usage

When you’re given a C++ reference and you know its referent is valid for a long time, use this method. Store the resulting CppRef somewhere in Rust with an equivalent lifetime.

§Safety

Because CppRefs are never dereferenced in Rust, misuse of this API cannot lead to undefined behavior in Rust and is therefore not unsafe. Nevertheless this can lead to UB in C++, so use carefully.

Source

pub fn from_ptr(ptr: *const T) -> Self

Create a C++ reference from a raw pointer.

Methods from Deref<Target = CppRef<T>>§

Source

pub fn as_ptr(&self) -> *const T

Retrieve the underlying C++ pointer.

Source

pub unsafe fn as_ref(&self) -> &T

Get a regular Rust reference out of this C++ reference.

§Safety

Callers must guarantee that the referent is not modified by any other C++ or Rust code while the returned reference exists. Callers must also guarantee that no mutable Rust reference is created to the referent while the returned reference exists.

Callers must also be sure that the C++ reference is properly aligned, not null, pointing to valid data, etc.

Source

pub fn const_cast(&self) -> CppMutRef<T>

Create a mutable version of this reference, roughly equivalent to C++ const_cast.

The opposite is to use AsCppRef::as_cpp_ref on a CppMutRef to obtain a CppRef.

§Safety

Because we never dereference a CppRef in Rust, this cannot create undefined behavior within Rust and is therefore not unsafe. It is however generally unwise, just as it is in C++. Use sparingly.

Trait Implementations§

Source§

impl<T: ?Sized> Clone for CppLtRef<'_, T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: ?Sized> Copy for CppLtRef<'_, T>

Source§

impl<T: ?Sized> Deref for CppLtRef<'_, T>

Source§

type Target = CppRef<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a, T> !Send for CppLtRef<'a, T>

§

impl<'a, T> !Sync for CppLtRef<'a, T>

§

impl<'a, T> Freeze for CppLtRef<'a, T>
where T: ?Sized,

§

impl<'a, T> RefUnwindSafe for CppLtRef<'a, T>
where T: RefUnwindSafe + ?Sized,

§

impl<'a, T> Unpin for CppLtRef<'a, T>
where T: ?Sized,

§

impl<'a, T> UnsafeUnpin for CppLtRef<'a, T>
where T: ?Sized,

§

impl<'a, T> UnwindSafe for CppLtRef<'a, T>
where T: RefUnwindSafe + ?Sized,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.