Skip to main content

Superclass

Trait Superclass 

Source
pub unsafe trait Superclass: Sized {
    // Required method
    fn vmt_rva() -> Rva;

    // Provided methods
    fn vmt_va() -> Va { ... }
    fn vmt(&self) -> Va { ... }
    fn is_subclass<T: Subclass<Self>>(&self) -> bool { ... }
    fn as_subclass<T: Subclass<Self>>(&self) -> Option<&T> { ... }
    fn as_subclass_mut<T: Subclass<Self>>(&mut self) -> Option<&mut T> { ... }
}
Expand description

A trait for C++ types that have multiple different subclasses. Implementing this for a superclass and Subclass for its subclasses makes it possible to safely check for the object’s actual type based on its vtable.

§Safety

In order to implement this for a struct, you must guarantee:

  • The struct uses C-style layout.
  • The first element of the struct is a pointer to a vtable for a class with MSVC RTTI.
  • There’s a 1-to-1 correspondence between vtable address and C++ class.

Required Methods§

Source

fn vmt_rva() -> Rva

The RVA of this class’s virtual method table.

Provided Methods§

Source

fn vmt_va() -> Va

The VA of this class’s virtual method table.

Source

fn vmt(&self) -> Va

Returns the Va for the runtime virtual method table for this.

Source

fn is_subclass<T: Subclass<Self>>(&self) -> bool

Returns whether this is an instance of T.

Source

fn as_subclass<T: Subclass<Self>>(&self) -> Option<&T>

Returns this as a T if it is one. Otherwise, returns None.

Source

fn as_subclass_mut<T: Subclass<Self>>(&mut self) -> Option<&mut T>

Returns this as a mutable T if it is one. Otherwise, returns None.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§