19 template <
typename T_DEST,
typename T_SRC,
typename T_DELETER>
20 std::unique_ptr<T_DEST, T_DELETER>
24 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
26 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
28 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
30 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
37 template <
typename T_DEST,
typename T_SRC,
typename T_DELETER>
38 std::unique_ptr<T_DEST, T_DELETER>
42 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
44 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
46 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
48 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
55 template <
typename T_DEST,
typename T_SRC>
56 std::unique_ptr<T_DEST>
60 return std::unique_ptr<T_DEST>(
nullptr);
62 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
64 return std::unique_ptr<T_DEST>(
nullptr);
66 std::unique_ptr<T_DEST> dest_temp(dest_ptr);
73 template <
typename T_DEST,
typename T_SRC>
74 std::unique_ptr<T_DEST>
78 return std::unique_ptr<T_DEST>(
nullptr);
80 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
82 return std::unique_ptr<T_DEST>(
nullptr);
84 std::unique_ptr<T_DEST> dest_temp(dest_ptr);
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast(std::unique_ptr< T_SRC, T_DELETER > &src)
These are reworked from https://stackoverflow.com/a/11003103.