libcryfs/pointer/cast.h

26 lines
633 B
C
Raw Normal View History

#pragma once
2015-10-15 12:58:16 +02:00
#ifndef MESSMER_CPPUTILS_POINTER_CAST_H_
#define MESSMER_CPPUTILS_POINTER_CAST_H_
#include <memory>
namespace cpputils {
/**
* dynamic_cast implementation for unique_ptr (moving unique_ptr into a unique_ptr of different type)
*/
2015-04-27 22:13:28 +02:00
//TODO Also allow passing a rvalue reference, otherwise dynamic_pointer_move(func()) won't work
template<typename DST, typename SRC>
inline std::unique_ptr<DST> dynamic_pointer_move(std::unique_ptr<SRC> &source) {
//TODO Deleter
DST *casted = dynamic_cast<DST*>(source.get());
if (casted != nullptr) {
source.release();
}
return std::unique_ptr<DST>(casted);
}
}
#endif