diff options
| author | ljfa-ag <ljfa-ag@web.de> | 2015-08-09 20:18:06 +0200 |
|---|---|---|
| committer | ljfa-ag <ljfa-ag@web.de> | 2015-08-09 20:18:06 +0200 |
| commit | 70e84ad70772dbacf4554c12650bb11a87f5a1ad (patch) | |
| tree | 637a1af164fa6214cc01ef631e218c587899a677 /include | |
| parent | 12374391af5b876094b802408e9b0e92429ae3c1 (diff) | |
| download | Project-Tick-70e84ad70772dbacf4554c12650bb11a87f5a1ad.tar.gz Project-Tick-70e84ad70772dbacf4554c12650bb11a87f5a1ad.zip | |
Create crtp_tag::sub_this method for convenience
Diffstat (limited to 'include')
| -rw-r--r-- | include/crtp_tag.h | 13 |
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); } } |
