Open CASCADE Technology 7.8.2.dev
Standard_Type.hxx File Reference
#include <Standard.hxx>
#include <Standard_Handle.hxx>
#include <Standard_Transient.hxx>
#include <Standard_OStream.hxx>
#include <typeinfo>
#include <typeindex>

Data Structures

class  Standard_Type
 This class provides legacy interface (type descriptor) to run-time type information (RTTI) for OCCT classes inheriting from Standard_Transient. More...
 
class  opencascade::type_instance< T >
 Template class providing instantiation of type descriptors as singletons. The descriptors are defined as static variables in function get(), which is essential to ensure that they are initialized in correct sequence. More...
 
class  opencascade::type_instance< void >
 Specialization of type descriptor instance for void; returns null handle. More...
 

Namespaces

namespace  opencascade
 Namespace opencascade is intended for low-level template classes and functions.
 

Macros

#define OCCT_CHECK_BASE_CLASS(Class, Base)
 
#define STANDARD_TYPE(theType)
 Helper macro to get instance of a type descriptor for a class in a legacy way.
 
#define DEFINE_STANDARD_RTTI_INLINE(Class, Base)
 Helper macro to be included in definition of the classes inheriting Standard_Transient to enable use of OCCT RTTI.
 
#define DEFINE_STANDARD_RTTIEXT(Class, Base)
 Helper macro to be included in definition of the classes inheriting Standard_Transient to enable use of OCCT RTTI.
 
#define IMPLEMENT_STANDARD_RTTIEXT(Class, Base)
 Defines implementation of type descriptor and DynamicType() function.
 

Functions

Standard_OStreamoperator<< (Standard_OStream &theStream, const Handle< Standard_Type > &theType)
 Operator printing type descriptor to stream.
 

Macro Definition Documentation

◆ DEFINE_STANDARD_RTTI_INLINE

#define DEFINE_STANDARD_RTTI_INLINE ( Class,
Base )
Value:
public: \
typedef Base base_type; \
static const char* get_type_name () { return #Class; OCCT_CHECK_BASE_CLASS(Class,Base) } \
static const Handle(Standard_Type)& get_type_descriptor () { return Standard_Type::Instance<Class>(); } \
virtual const Handle(Standard_Type)& DynamicType() const Standard_OVERRIDE { return get_type_descriptor (); }
#define Handle(Class)
Define Handle() macro.
Definition Standard_Handle.hxx:399
#define Standard_OVERRIDE
Should be used in declarations of virtual methods overridden in the derived classes,...
Definition Standard_Macro.hxx:41
#define OCCT_CHECK_BASE_CLASS(Class, Base)
Definition Standard_Type.hxx:78
This class provides legacy interface (type descriptor) to run-time type information (RTTI) for OCCT c...
Definition Standard_Type.hxx:146
static const Handle< Standard_Type > & Instance()
Template function returning instance of the type descriptor for an argument class.
Definition Standard_Type.hxx:178

Helper macro to be included in definition of the classes inheriting Standard_Transient to enable use of OCCT RTTI.

Inline version, does not require IMPLEMENT_STANDARD_RTTIEXT, but when used for big hierarchies of classes may cause considerable increase of size of binaries.

◆ DEFINE_STANDARD_RTTIEXT

#define DEFINE_STANDARD_RTTIEXT ( Class,
Base )
Value:
public: \
typedef Base base_type; \
static const char* get_type_name () { return #Class; OCCT_CHECK_BASE_CLASS(Class,Base) } \
Standard_EXPORT static const Handle(Standard_Type)& get_type_descriptor (); \
Standard_EXPORT virtual const Handle(Standard_Type)& DynamicType() const Standard_OVERRIDE;

Helper macro to be included in definition of the classes inheriting Standard_Transient to enable use of OCCT RTTI.

Out-of-line version, requires IMPLEMENT_STANDARD_RTTIEXT.

◆ IMPLEMENT_STANDARD_RTTIEXT

#define IMPLEMENT_STANDARD_RTTIEXT ( Class,
Base )
Value:
const Handle(Standard_Type)& Class::get_type_descriptor () { return Standard_Type::Instance<Class>(); } \
const Handle(Standard_Type)& Class::DynamicType() const { return STANDARD_TYPE(Class); }
#define STANDARD_TYPE(theType)
Helper macro to get instance of a type descriptor for a class in a legacy way.
Definition Standard_Type.hxx:86

Defines implementation of type descriptor and DynamicType() function.

◆ OCCT_CHECK_BASE_CLASS

#define OCCT_CHECK_BASE_CLASS ( Class,
Base )
Value:
static_assert(opencascade::is_base_but_not_same<Base, Class>::value, "OCCT RTTI definition is incorrect: " #Base " is not base class of " #Class);
Trait yielding true if class T1 is base of T2 but not the same.
Definition Standard_Std.hxx:41

◆ STANDARD_TYPE

#define STANDARD_TYPE ( theType)
Value:
theType::get_type_descriptor()

Helper macro to get instance of a type descriptor for a class in a legacy way.

Function Documentation

◆ operator<<()

Standard_OStream & operator<< ( Standard_OStream & theStream,
const Handle< Standard_Type > & theType )
inline

Operator printing type descriptor to stream.