4#ifndef UTILS_INITIALIZABLE_OBJECT_H
5#define UTILS_INITIALIZABLE_OBJECT_H
9#include "utils/traits.h"
10#include "utils/types.h"
15namespace InitializableObjectDetail
20 { t.initialize () } -> std::convertible_to<bool>;
34 template <
typename... Args>
38 std::shared_ptr<Derived> (
new Derived (std::forward<Args> (args)...));
39 return obj->initialize () ? obj :
nullptr;
43 template <
typename... Args>
47 std::unique_ptr<Derived> (
new Derived (std::forward<Args> (args)...));
48 return obj->initialize () ? std::move (obj) :
nullptr;
A factory class for creating initializable objects using static polymorphism.
InitializableObject()=default
Protected constructor to prevent instantiation.
static std::shared_ptr< Derived > create_shared(Args &&... args)
Creates a shared pointer to initialized object.
static std::unique_ptr< Derived > create_unique(Args &&... args)
Creates a unique pointer to initialized object.
Concept to ensure a type has an initialize() method returning bool.