summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2014-02-26 19:31:49 +0000
committerMarkus Engel <markus.engel@tum.de>2014-02-26 19:31:49 +0000
commit21fa74799d08edc54fa6506e3f78fab04215241a (patch)
tree6ee36562ac02167eba78b506e07a1e402fc05996 /src/ui
parentMade constructors of tools use initializer lists. (diff)
downloadinkscape-21fa74799d08edc54fa6506e3f78fab04215241a.tar.gz
inkscape-21fa74799d08edc54fa6506e3f78fab04215241a.zip
Added template functions as a casting-macro replacement.
(bzr r13061)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/tools/tool-base.h24
1 files changed, 23 insertions, 1 deletions
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 <type_traits>
+
+namespace Tool {
+
+template<class Derived, typename T>
+bool is_a(const T* t) {
+ //static_assert(std::is_base_of<Tools::ToolBase, Derived>(), "Destination type not derived from ToolBase.");
+ //static_assert(std::is_convertible<const Tools::ToolBase*, const T*>(), "Cannot cast passed pointer to ToolBase*.");
+
+ return dynamic_cast<const Derived*>(static_cast<const Tools::ToolBase*>(t)) != NULL;
}
+
+template<class Derived, typename T>
+Derived* to(T* t) {
+ //static_assert(std::is_base_of<Tools::ToolBase, Derived>(), "Destination type not derived from ToolBase.");
+ //static_assert(std::is_convertible<Tools::ToolBase*, T*>(), "Cannot cast passed pointer to ToolBase*.");
+
+ return dynamic_cast<Derived*>(static_cast<Tools::ToolBase*>(t));
}
-}
+
+} // namespace Tool
+} // namespace UI
+} // namespace Inkscape
#endif // SEEN_SP_EVENT_CONTEXT_H