23 template<
typename flag,
typename T>
51 using Type = std::unique_ptr<T>;
58 using Type = std::shared_ptr<T>;
64 template<
typename T,
typename... Args>
67 input =
new T(std::forward<Args>(args)...);
74 template<
typename T,
typename... Args>
75 static void CreateImpl(T*& input, [[gnu::unused]] Args&&... args)
84 template<
typename... Args>
90 template<
typename Deleter>
93 template<
typename T,
typename... Args>
94 static void CreateImpl(std::unique_ptr<T>& input, Args&&... args)
96 input = std::unique_ptr<T>(
new T(std::forward<Args>(args)...), Deleter());
99 template<
typename T,
typename... Args>
100 static void CreateImpl(std::shared_ptr<T>& input, Args&&... args)
102 input = std::shared_ptr<T>(
new T(std::forward<Args>(args)...), Deleter());
109 template<
typename T,
typename... Args>
114 template<
typename T,
typename... Args>
115 static void InitializeImpl(std::unique_ptr<T>& input, [[gnu::unused]] Args&&... args)
119 template<
typename T,
typename... Args>
120 static void InitializeImpl(std::shared_ptr<T>& input, [[gnu::unused]] Args&&... args)
129 template<
typename... Args>
137 template<
typename... Args>
154 template<
typename Deserializer,
157 typename AllocatorType,
158 typename InitializerType,
159 typename DeleterType>
173 InitializerType::InitializeImpl(
fInput);
176 template<
typename... Args>
179 AllocatorType::CreateImpl(
fInput, std::forward<Args>(args)...);
189 template<
typename Serializer,
192 typename AllocatorType,
193 typename InitializerType,
194 typename DeleterType>
204 InitializerType::InitializeImpl(
fOutput);
207 template<
typename... Args>
210 AllocatorType::CreateImpl(
fOutput, std::forward<Args>(args)...);
static void InitializeImpl([[gnu::unused]] Args &&...args)
static void DestroyImpl(T *input)
static void CreateImpl(std::unique_ptr< T > &input, Args &&...args)
static void InitializeImpl(std::unique_ptr< T > &input, [[gnu::unused]] Args &&...args)
static void CreateImpl(std::shared_ptr< T > &input, Args &&...args)
static void InitializeImpl(std::shared_ptr< T > &input, [[gnu::unused]] Args &&...args)
void Create(Args &&...args)
typename SelectPassType< PassType, Data >::Type DataType
std::shared_ptr< T > Type
static void DestroyImpl([[gnu::unused]] Args &&...args)
static void CreateImpl(T *&input, [[gnu::unused]] Args &&...args)
Serializer SerializerType
static void CreateImpl(T *&input, Args &&...args)
static void CreateImpl([[gnu::unused]] Args &&...args)
std::unique_ptr< T > Type
static void InitializeImpl(T *&input, [[gnu::unused]] Args &&...args)