![]() |
Jolt Physics
A multi core friendly Game Physics Engine
|
#include <RTTI.h>
Classes | |
| struct | BaseClass |
| Base class information. More... | |
Public Types | |
| using | pCreateObjectFunction = void *(*)() |
| Function to create an object. | |
| using | pDestructObjectFunction = void (*)(void *inObject) |
| Function to destroy an object. | |
| using | pCreateRTTIFunction = void (*)(RTTI &inRTTI) |
| Function to initialize the runtime type info structure. | |
Protected Attributes | |
| const char * | mName |
| Class name. | |
| int | mSize |
| Class size. | |
| StaticArray< BaseClass, 4 > | mBaseClasses |
| Names of base classes. | |
| pCreateObjectFunction | mCreate |
| Pointer to a function that will create a new instance of this class. | |
| pDestructObjectFunction | mDestruct |
| Pointer to a function that will destruct an object of this class. | |
| StaticArray< SerializableAttribute, 32 > | mAttributes |
| All attributes of this class. | |
Light weight runtime type information system. This way we don't need to turn on the default RTTI system of the compiler (introducing a possible overhead for every class)
Notes:
To use RTTI on a specific class use:
Header file:
class Foo
{
JPH_DECLARE_RTTI_VIRTUAL_BASE(Foo)
}
class Bar : public Foo
{
JPH_DECLARE_RTTI_VIRTUAL(Bar)
};
Implementation file:
JPH_IMPLEMENT_RTTI_VIRTUAL_BASE(Foo)
{
}
JPH_IMPLEMENT_RTTI_VIRTUAL(Bar)
{
JPH_ADD_BASE_CLASS(Bar, Foo) // Multiple inheritance is allowed, just do JPH_ADD_BASE_CLASS for every base class
}
For abstract classes use:
Header file:
class Foo
{
JPH_DECLARE_RTTI_ABSTRACT_BASE(Foo)
public:
virtual void AbstractFunction() = 0;
}
class Bar : public Foo
{
JPH_DECLARE_RTTI_VIRTUAL(Bar)
public:
virtual void AbstractFunction() { } // Function is now implemented so this class is no longer abstract
};
Implementation file:
JPH_IMPLEMENT_RTTI_ABSTRACT_BASE(Foo)
{
}
JPH_IMPLEMENT_RTTI_VIRTUAL(Bar)
{
JPH_ADD_BASE_CLASS(Bar, Foo)
}
Example of usage in a program:
Foo *foo_ptr = new Foo; Foo *bar_ptr = new Bar; IsType(foo_ptr, RTTI(Bar)) returns false IsType(bar_ptr, RTTI(Bar)) returns true IsKindOf(foo_ptr, RTTI(Bar)) returns false IsKindOf(bar_ptr, RTTI(Foo)) returns true IsKindOf(bar_ptr, RTTI(Bar)) returns true StaticCast<Bar>(foo_ptr) asserts and returns foo_ptr casted to pBar StaticCast<Bar>(bar_ptr) returns bar_ptr casted to pBar DynamicCast<Bar>(foo_ptr) returns nullptr DynamicCast<Bar>(bar_ptr) returns bar_ptr casted to pBar
Other feature of DynamicCast:
class A { int data[5]; };
class B { int data[7]; };
class C : public A, public B { int data[9]; };
C *c = new C;
A *a = c;
Note that:
B *b = (B *)a;
generates an invalid pointer,
B *b = StaticCast<B>(a);
doesn't compile, and
B *b = DynamicCast<B>(a);
does the correct cast
| using RTTI::pCreateObjectFunction = void *(*)() |
Function to create an object.
| using RTTI::pCreateRTTIFunction = void (*)(RTTI &inRTTI) |
Function to initialize the runtime type info structure.
Function to destroy an object.
| JPH_NAMESPACE_BEGIN RTTI::RTTI | ( | const char * | inName, |
| int | inSize, | ||
| pCreateObjectFunction | inCreateObject, | ||
| pDestructObjectFunction | inDestructObject ) |
Constructor.
| RTTI::RTTI | ( | const char * | inName, |
| int | inSize, | ||
| pCreateObjectFunction | inCreateObject, | ||
| pDestructObjectFunction | inDestructObject, | ||
| pCreateRTTIFunction | inCreateRTTI ) |
| void RTTI::AddAttribute | ( | const SerializableAttribute & | inAttribute | ) |
Attribute access.
Cast inObject of this type to object of type inRTTI, returns nullptr if the cast is unsuccessful.
| void * RTTI::CreateObject | ( | ) | const |
Create an object of this type (returns nullptr if the object is abstract)
Destruct object of this type (does nothing if the object is abstract)
| const SerializableAttribute & RTTI::GetAttribute | ( | int | inIdx | ) | const |
| int RTTI::GetAttributeCount | ( | ) | const |
| int RTTI::GetBaseClassCount | ( | ) | const |
| uint32 RTTI::GetHash | ( | ) | const |
|
inline |
|
inline |
Test if this class is derived from class of type inRTTI.
|
protected |
All attributes of this class.
|
protected |
Names of base classes.
|
protected |
Pointer to a function that will create a new instance of this class.
|
protected |
Pointer to a function that will destruct an object of this class.
|
protected |
Class size.