ActiveLib
Loading...
Searching...
No Matches
Cloner.h
1
6#ifndef ACTIVE_UTILITY_CLONABLE
7#define ACTIVE_UTILITY_CLONABLE
8
9#include <concepts>
10#include <memory>
11
12namespace active::utility {
13
17 class Cloner {
18 public:
22 virtual ~Cloner() = default;
27 virtual Cloner* clonePtr() const = 0;
28 };
29
30
32 template<class T>
33 concept Clonable = std::is_base_of<Cloner, T>::value;
34
35
41 template<class T> requires Clonable<T>
42 inline auto clone(const T& item) {
43 return std::unique_ptr<T>{item.clonePtr()};
44 }
45
46}
47
48#endif //ACTIVE_UTILITY_CLONABLE
Definition Cloner.h:17
virtual ~Cloner()=default
virtual Cloner * clonePtr() const =0
Clonable concept for classes/functions dependent on cloning.
Definition Cloner.h:33
Definition Base64Transport.h:11
auto clone(const T &item)
Definition Cloner.h:42