diff options
| author | Markus Engel <markus.engel@tum.de> | 2014-02-26 19:31:49 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2014-02-26 19:31:49 +0000 |
| commit | 21fa74799d08edc54fa6506e3f78fab04215241a (patch) | |
| tree | 6ee36562ac02167eba78b506e07a1e402fc05996 /src/ui/tools | |
| parent | Made constructors of tools use initializer lists. (diff) | |
| download | inkscape-21fa74799d08edc54fa6506e3f78fab04215241a.tar.gz inkscape-21fa74799d08edc54fa6506e3f78fab04215241a.zip | |
Added template functions as a casting-macro replacement.
(bzr r13061)
Diffstat (limited to 'src/ui/tools')
| -rw-r--r-- | src/ui/tools/tool-base.h | 24 |
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 |
