ORIGINAL
Loading...
Searching...
No Matches
cloneable.h
Go to the documentation of this file.
1#ifndef CLONEABLE_H
2#define CLONEABLE_H
3
4
11namespace original {
20template<typename DERIVED>
22protected:
27 baseCloneable() = default;
28
29public:
43 [[nodiscard]] virtual DERIVED* clone() const;
44
49 virtual ~baseCloneable() = default;
50};
51
58class cloneable : public baseCloneable<cloneable> {
59protected:
64 cloneable() = default;
65
66public:
71 ~cloneable() override = default;
72};
73
74} // namespace original
75
76// ----------------- Definitions of cloneable.h -----------------
77
78template<typename DERIVED>
80 return new DERIVED(static_cast<const DERIVED&>(*this));
81}
82
83#endif //CLONEABLE_H
Base class that defines a cloneable interface.
Definition cloneable.h:21
virtual ~baseCloneable()=default
Virtual destructor for baseCloneable.
baseCloneable()=default
Default constructor for baseCloneable.
virtual DERIVED * clone() const
Creates a clone of the current object.
Definition cloneable.h:79
Concrete cloneable class with custom cloning behavior.
Definition cloneable.h:58
~cloneable() override=default
Virtual destructor for cloneable.
cloneable()=default
Default constructor for cloneable.
Unique ownership smart pointer with move semantics.
Definition ownerPtr.h:37
Main namespace for the project Original.
Definition algorithms.h:21