20 template <
typename T_DEST,
typename T_SRC,
typename T_DELETER>
21 std::unique_ptr<T_DEST, T_DELETER>
25 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
27 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
29 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
31 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
38 template <
typename T_DEST,
typename T_SRC,
typename T_DELETER>
39 std::unique_ptr<T_DEST, T_DELETER>
43 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
45 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
47 return std::unique_ptr<T_DEST, T_DELETER>(
nullptr);
49 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
56 template <
typename T_DEST,
typename T_SRC>
57 std::unique_ptr<T_DEST>
61 return std::unique_ptr<T_DEST>(
nullptr);
63 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
65 return std::unique_ptr<T_DEST>(
nullptr);
67 std::unique_ptr<T_DEST> dest_temp(dest_ptr);
74 template <
typename T_DEST,
typename T_SRC>
75 std::unique_ptr<T_DEST>
79 return std::unique_ptr<T_DEST>(
nullptr);
81 T_DEST * dest_ptr =
dynamic_cast<T_DEST *
>(src.get());
83 return std::unique_ptr<T_DEST>(
nullptr);
85 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.