GENEIAL  0.2=/
 All Classes Pages
EnableMakeShared.h
1 #pragma once
2 #include <geneial/namespaces.h>
3 
4 geneial_private_namespace(geneial)
5 {
6 geneial_private_namespace(utility)
7 {
8 
9 geneial_export_namespace
10 {
11 
12 
17 template<typename CLIENT>
18 class EnableMakeShared
19 {
20 
21 protected:
27  template<typename ...ARG>
28  std::shared_ptr<CLIENT> static makeShared(ARG&&...arg)
29  {
30  struct LocalEnableMakeShared: public CLIENT
31  {
32  LocalEnableMakeShared(ARG&&...arg) :
33  CLIENT(std::forward<ARG>(arg)...)
34  {
35  }
36  };
37 
38  return std::make_shared<LocalEnableMakeShared>(std::forward<ARG>(arg)...);
39  }
40 };
41 
42 } /* export namespace */
43 } /* namespace utility */
44 } /* namespace geneial */