From 305d92d7bfb46ebcf943ba6432a7ebfd993adf17 Mon Sep 17 00:00:00 2001 From: abv Date: Sat, 28 Nov 2015 08:10:27 +0300 Subject: [PATCH] Revive IMPLEMENT_STANDARD_RTTIEXT macro; two variants of DEFINE_STANDARD_RTTI macro (...EXT and ..._INLINE) --- src/Standard/Standard_DefineHandle.hxx | 1 - src/Standard/Standard_Type.hxx | 19 ++++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Standard/Standard_DefineHandle.hxx b/src/Standard/Standard_DefineHandle.hxx index c33381ac00..f03415c212 100644 --- a/src/Standard/Standard_DefineHandle.hxx +++ b/src/Standard/Standard_DefineHandle.hxx @@ -36,6 +36,5 @@ class Standard_Type; #define IMPLEMENT_STANDARD_SUPERTYPE_ARRAY() #define IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_END() #define IMPLEMENT_STANDARD_TYPE_END(C1) -#define IMPLEMENT_STANDARD_RTTIEXT(C1,C2) #endif diff --git a/src/Standard/Standard_Type.hxx b/src/Standard/Standard_Type.hxx index d36234ad00..e3291b4e9a 100644 --- a/src/Standard/Standard_Type.hxx +++ b/src/Standard/Standard_Type.hxx @@ -27,13 +27,30 @@ //! Helper macro to be included in definition of the classes inheriting //! Standard_Transient to enable use of OCCT RTTI and smart pointers (handles). -#define DEFINE_STANDARD_RTTI(Class,Base) \ +//! +//! Inline version, does not require IMPLEMENT_STANDARD_RTTIEXT but +//! leading to increase of size of binaries. +#define DEFINE_STANDARD_RTTI_INLINE(Class,Base) \ public: \ typedef Base base_type; \ static const char* get_type_name () { return #Class; } \ virtual const Handle(Standard_Type)& DynamicType() const Standard_OVERRIDE \ { return STANDARD_TYPE(Class); } +//! Helper macro to be included in definition of the classes inheriting +//! Standard_Transient to enable use of OCCT RTTI and smart pointers (handles). +//! +//! Out-of-line version, requires IMPLEMENT_STANDARD_RTTIEXT. +#define DEFINE_STANDARD_RTTIEXT(Class,Base) \ +public: \ + typedef Base base_type; \ + static const char* get_type_name () { return #Class; } \ + virtual const Handle(Standard_Type)& DynamicType() const Standard_OVERRIDE; + +//! Defines implementation of DynamicType() function +#define IMPLEMENT_STANDARD_RTTIEXT(Class,Base) \ + const Handle(Standard_Type)& Class::DynamicType() const { return STANDARD_TYPE(Class); } + // forward declaration of type_instance class namespace opencascade { template