summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorljfa-ag <ljfa-ag@web.de>2015-08-09 20:18:06 +0200
committerljfa-ag <ljfa-ag@web.de>2015-08-09 20:18:06 +0200
commit70e84ad70772dbacf4554c12650bb11a87f5a1ad (patch)
tree637a1af164fa6214cc01ef631e218c587899a677
parent12374391af5b876094b802408e9b0e92429ae3c1 (diff)
downloadProject-Tick-70e84ad70772dbacf4554c12650bb11a87f5a1ad.tar.gz
Project-Tick-70e84ad70772dbacf4554c12650bb11a87f5a1ad.zip
Create crtp_tag::sub_this method for convenience
-rw-r--r--include/crtp_tag.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/include/crtp_tag.h b/include/crtp_tag.h
index 86f070e147..11c41cb5b3 100644
--- a/include/crtp_tag.h
+++ b/include/crtp_tag.h
@@ -48,6 +48,9 @@ namespace detail
private:
bool equals(const tag& rhs) const override final;
+
+ Sub& sub_this() { return static_cast<Sub&>(*this); }
+ const Sub& sub_this() const { return static_cast<const Sub&>(*this); }
};
template<class Sub>
@@ -62,31 +65,31 @@ namespace detail
template<class Sub>
std::unique_ptr<tag> crtp_tag<Sub>::clone() const&
{
- return make_unique<Sub>(static_cast<const Sub&>(*this));
+ return make_unique<Sub>(sub_this());
}
template<class Sub>
std::unique_ptr<tag> crtp_tag<Sub>::move_clone() &&
{
- return make_unique<Sub>(static_cast<Sub&&>(*this));
+ return make_unique<Sub>(std::move(sub_this()));
}
template<class Sub>
tag& crtp_tag<Sub>::assign(tag&& rhs)
{
- return static_cast<Sub&>(*this) = dynamic_cast<Sub&&>(rhs);
+ return sub_this() = dynamic_cast<Sub&&>(rhs);
}
template<class Sub>
void crtp_tag<Sub>::accept(tag_visitor& visitor)
{
- visitor.visit(static_cast<Sub&>(*this));
+ visitor.visit(sub_this());
}
template<class Sub>
bool crtp_tag<Sub>::equals(const tag& rhs) const
{
- return static_cast<const Sub&>(*this) == static_cast<const Sub&>(rhs);
+ return sub_this() == static_cast<const Sub&>(rhs);
}
}