diff --git a/src/Base/BaseClass.h b/src/Base/BaseClass.h index ee7294856..b23ec97b5 100644 --- a/src/Base/BaseClass.h +++ b/src/Base/BaseClass.h @@ -103,8 +103,33 @@ public: }; +/** + * Template that works just like dynamic_cast, but expects the argument to + * inherit from Base::BaseClass. + * + */ +template T * freecad_dynamic_cast(Base::BaseClass * t) +{ + if (t && t->isDerivedFrom(T::getClassTypeId())) + return static_cast(t); + else + return 0; +} +/** + * Template that works just like dynamic_cast, but expects the argument to + * inherit from a const Base::BaseClass. + * + */ + +template const T * freecad_dynamic_cast(const Base::BaseClass * t) +{ + if (t && t->isDerivedFrom(T::getClassTypeId())) + return static_cast(t); + else + return 0; +} } //namespace Base