From 21fa74799d08edc54fa6506e3f78fab04215241a Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Wed, 26 Feb 2014 20:31:49 +0100 Subject: Added template functions as a casting-macro replacement. (bzr r13061) --- src/ui/tools/tool-base.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/ui') diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h index a4a27a06c..79bdfe89d 100644 --- a/src/ui/tools/tool-base.h +++ b/src/ui/tools/tool-base.h @@ -215,9 +215,31 @@ void sp_toggle_dropper(SPDesktop *dt); bool sp_event_context_knot_mouseover(ToolBase *ec); +} // namespace Tools + +//#include + +namespace Tool { + +template +bool is_a(const T* t) { + //static_assert(std::is_base_of(), "Destination type not derived from ToolBase."); + //static_assert(std::is_convertible(), "Cannot cast passed pointer to ToolBase*."); + + return dynamic_cast(static_cast(t)) != NULL; } + +template +Derived* to(T* t) { + //static_assert(std::is_base_of(), "Destination type not derived from ToolBase."); + //static_assert(std::is_convertible(), "Cannot cast passed pointer to ToolBase*."); + + return dynamic_cast(static_cast(t)); } -} + +} // namespace Tool +} // namespace UI +} // namespace Inkscape #endif // SEEN_SP_EVENT_CONTEXT_H -- cgit v1.2.3