diff options
author | Noel Grandin <noel@peralex.com> | 2014-09-18 15:10:54 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-09-23 17:27:47 +0200 |
commit | 23e1fc277d5651babce17bb74408ef6505f101d2 (patch) | |
tree | edf64a973766400f870095f4ecd25784bfea6ba5 /include/tools/rtti.hxx | |
parent | 7f895dfbf5fb084d747e52db678d75e3273cd825 (diff) |
loplugin: cstylecast, update PTR_CAST macro to use static_cast
I introduce a template method into the PTR_CAST machinery
to maintain constness.
There is now a FIXME in sd/../docshell.cxx because I needed
to use a dynamic_cast there to work around the games it appears
to be playing with OLE in-place activation.
Signed-off-by: Stephan Bergmann <sbergman@redhat.com>,
dropping the GCC-extension, unnecessary use of typeof from tools/rtti.hxx
Change-Id: Iba5ace1aa27e02b34fcc91af1e658c43371afd03
Diffstat (limited to 'include/tools/rtti.hxx')
-rw-r--r-- | include/tools/rtti.hxx | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/include/tools/rtti.hxx b/include/tools/rtti.hxx index 0a5696b1dd46..92555a26c326 100644 --- a/include/tools/rtti.hxx +++ b/include/tools/rtti.hxx @@ -122,8 +122,17 @@ typedef void* (*TypeId)(); T: Target type to cast into p: Pointer to be cast into T */ -#define PTR_CAST( T, pObj ) \ - ( pObj && (pObj)->IsA( TYPE(T) ) ? (T*)(pObj) : 0 ) +#define PTR_CAST( T, pObj ) rttiCast<T>(pObj, TYPE(T)) + +template<class T1, class T2> +inline T1* rttiCast(T2* pObj, const TypeId& rTypeId) { + return (pObj && pObj->IsA( rTypeId )) ? static_cast<T1*>(pObj) : 0; +}; + +template<class T1, class T2> +inline const T1* rttiCast(const T2* pObj, const TypeId& rTypeId) { + return (pObj && pObj->IsA( rTypeId )) ? static_cast<const T1*>(pObj) : 0; +}; /** Check whether object pObj has a Base Class T (or if pObj is an instance of T) */ |