https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Functions
CastUniquePointer.h File Reference

Go to the source code of this file.

Functions

template<typename T_DEST , typename T_SRC , typename T_DELETER >
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.
 
template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast (std::unique_ptr< T_SRC, T_DELETER > &&src)
 
template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast (std::unique_ptr< T_SRC > &src)
 
template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast (std::unique_ptr< T_SRC > &&src)
 

Function Documentation

◆ dynamic_pointer_cast() [1/4]

template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast ( std::unique_ptr< T_SRC > &&  src)

Definition at line 76 of file CastUniquePointer.h.

77{
78 if (!src)
79 return std::unique_ptr<T_DEST>(nullptr);
80
81 T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
82 if (!dest_ptr)
83 return std::unique_ptr<T_DEST>(nullptr);
84
85 std::unique_ptr<T_DEST> dest_temp(dest_ptr);
86
87 src.release();
88
89 return dest_temp;
90}

◆ dynamic_pointer_cast() [2/4]

template<typename T_DEST , typename T_SRC >
std::unique_ptr< T_DEST > dynamic_pointer_cast ( std::unique_ptr< T_SRC > &  src)

Definition at line 58 of file CastUniquePointer.h.

59{
60 if (!src)
61 return std::unique_ptr<T_DEST>(nullptr);
62
63 T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
64 if (!dest_ptr)
65 return std::unique_ptr<T_DEST>(nullptr);
66
67 std::unique_ptr<T_DEST> dest_temp(dest_ptr);
68
69 src.release();
70
71 return dest_temp;
72}

◆ dynamic_pointer_cast() [3/4]

template<typename T_DEST , typename T_SRC , typename T_DELETER >
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast ( std::unique_ptr< T_SRC, T_DELETER > &&  src)

Definition at line 40 of file CastUniquePointer.h.

41{
42 if (!src)
43 return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
44
45 T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
46 if (!dest_ptr)
47 return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
48
49 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
50
51 src.release();
52
53 return dest_temp;
54}

◆ dynamic_pointer_cast() [4/4]

template<typename T_DEST , typename T_SRC , typename T_DELETER >
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.

New GitHub Repo here: https://github.com/friedmud/unique_ptr_cast

Definition at line 22 of file CastUniquePointer.h.

23{
24 if (!src)
25 return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
26
27 T_DEST * dest_ptr = dynamic_cast<T_DEST *>(src.get());
28 if (!dest_ptr)
29 return std::unique_ptr<T_DEST, T_DELETER>(nullptr);
30
31 std::unique_ptr<T_DEST, T_DELETER> dest_temp(dest_ptr, std::move(src.get_deleter()));
32
33 src.release();
34
35 return dest_temp;
36}