Celero
PimplImpl.h
1 #pragma once
2 
20 
21 #include <memory>
22 #include <utility>
23 
24 namespace celero
25 {
26  template <typename T>
27  Pimpl<T>::Pimpl() : _pimpl(new T())
28  {
29  }
30 
31  template <typename T>
32  template <typename Arg1>
33  Pimpl<T>::Pimpl(Arg1&& arg1) : _pimpl(new T(std::forward<Arg1>(arg1)))
34  {
35  }
36 
37  template <typename T>
38  template <typename Arg1, typename Arg2>
39  Pimpl<T>::Pimpl(Arg1&& arg1, Arg2&& arg2) : _pimpl(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2)))
40  {
41  }
42 
43  template <typename T>
44  template <typename Arg1, typename Arg2, typename Arg3>
45  Pimpl<T>::Pimpl(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3)
46  : _pimpl(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3)))
47  {
48  }
49 
50  template <typename T>
51  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
52  Pimpl<T>::Pimpl(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4)
53  : _pimpl(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4)))
54  {
55  }
56 
57  template <typename T>
58  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
59  Pimpl<T>::Pimpl(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5)
60  : _pimpl(
61  new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5)))
62  {
63  }
64 
65  template <typename T>
66  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6>
67  Pimpl<T>::Pimpl(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5, Arg6&& arg6)
68  : _pimpl(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4),
69  std::forward<Arg5>(arg5), std::forward<Arg6>(arg6)))
70  {
71  }
72 
73  template <typename T>
74  Pimpl<T>::~Pimpl()
75  {
76  }
77 
78  template <typename T>
79  T* Pimpl<T>::operator->()
80  {
81  return _pimpl.get();
82  }
83 
84  template <typename T>
85  const T* Pimpl<T>::operator->() const
86  {
87  return _pimpl.get();
88  }
89 
90  template <typename T>
91  T& Pimpl<T>::operator*()
92  {
93  return *_pimpl.get();
94  }
95 }
Definition: Archive.h:25