Add move version of rcp_dynamic_cast()
This commit is contained in:
1 parent
69ecab39f2
commit
627661158e
2 files changed
+43
No files matched your search
@@ -174,6 +174,9 @@ public:
|
||||
{
|
||||
return T::create(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename V, typename W>
|
||||
friend rcp<V> rcp_dynamic_cast(rcp<W> && other);
|
||||
};
|
||||
|
||||
template <typename T, typename U>
|
||||
@@ -182,6 +185,20 @@ rcp<T> rcp_dynamic_cast(const rcp<U> & other)
|
||||
return rcp<T>(dynamic_cast<T *>(other.get_raw()));
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
rcp<T> rcp_dynamic_cast(rcp<U> && other)
|
||||
{
|
||||
T * p = dynamic_cast<T *>(other.ptr);
|
||||
if (p)
|
||||
{
|
||||
other.ptr = nullptr;
|
||||
rcp<T> result;
|
||||
result.ptr = p;
|
||||
return result;
|
||||
}
|
||||
return rcp<T>();
|
||||
}
|
||||
|
||||
#define rcp_managed_root(classname) \
|
||||
public: \
|
||||
void rcp_inc() const \
|
||||
|
||||
Reference in new issue
Block a user