Orion
high-rate readout
factory.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 namespace itk {
8 
13  class CoreFactory {
14  public:
16  virtual ~CoreFactory() = default;
17 
19  virtual void set_default() = 0;
20  }; // CoreFactory
21 
22 
25  inline void set_factory(CoreFactory& factory) {
26  factory.set_default();
27  }
28 
29 
34  template<typename T>
35  class Factory : public CoreFactory {
36  public:
37  using Base = T;
38  inline static Factory* maker = nullptr;
39 
41  void set_default() override {
42  maker = this;
43  }
44  };
45 
50  template<typename T, typename... Args>
51  T* make(Args & ... args) {
52  auto maker = reinterpret_cast<T::Factory*>(T::Factory::maker);
53  return (*maker)(args...);
54  }
55 
56 } // itk
CoreFactory core class for OOP factory framework.
Definition: factory.hpp:13
virtual ~CoreFactory()=default
Default destructor.
virtual void set_default()=0
Set this factory as default.
Templated implementation of Factory class.
Definition: factory.hpp:35
void set_default() override
Set this factory as default.
Definition: factory.hpp:41
T * make(Args &... args)
Templated class creator.
Definition: factory.hpp:51
void set_factory(CoreFactory &factory)
Set factory as default.
Definition: factory.hpp:25