RDFAnalysis  0.1.1
Physics analysis with ROOT::RDataFrame
ResultWrapper.h
Go to the documentation of this file.
1 #ifndef RDFAnalysis_ResultWrapper_H
2 #define RDFAnalysis_ResultWrapper_H
3 
4 // ROOT includes
5 #include <ROOT/RDF/InterfaceUtils.hxx>
6 
7 // STL includes
8 #include <type_traits>
9 #include <functional>
10 
16 namespace RDFAnalysis {
24  template <typename T>
25  class ResultWrapper {
26  public:
29 
35  template <typename U,
36  typename = std::enable_if_t<std::is_base_of<T, U>{} || std::is_same<T, U>{}, void>>
37  /* ResultWrapper(const ROOT::RDF::RResultPtr<U>& ptr) : */
38  ResultWrapper(ROOT::RDF::RResultPtr<U> ptr) :
39  m_holder([ptr] () mutable -> T* {return ptr.GetPtr();}) {}
40 
46  template <typename U,
47  typename = std::enable_if_t<
48  std::is_base_of<T, U>{} && !std::is_same<T, U>{}, void>>
50  m_holder([other] () mutable -> T* { return other.get(); }) {}
51 
57  template <typename U,
58  typename = std::enable_if_t<
59  std::is_base_of<T, U>{} && !std::is_same<T, U>{}, void>>
61  m_holder([other] () { return other.get(); }) {}
62 
64  ResultWrapper(const ResultWrapper&) = default;
66  ResultWrapper(ResultWrapper&&) = default;
67 
71  T* get() {
72  return m_holder();
73  }
74  private:
76  std::function<T*()> m_holder;
77 
78 
79  }; //> end class ResultWrapper
80 } //> end namespace RDFAnalysis
81 #endif //> !RDFAnalysis_ResultWrapper_H
ResultWrapper(ResultWrapper< U > &&other)
Move constructor.
Definition: ResultWrapper.h:60
T * get()
Get the held value.
Definition: ResultWrapper.h:71
Definition: CutflowDetail.h:11
ResultWrapper(ROOT::RDF::RResultPtr< U > ptr)
Constructor.
Definition: ResultWrapper.h:38
~ResultWrapper()
Destructor.
Definition: ResultWrapper.h:28
Wrapper class for RResultPtrs.
Definition: ResultWrapper.h:25
ResultWrapper(ResultWrapper< U > other)
Copy constructor.
Definition: ResultWrapper.h:49