PolyBoRi
CMemberFunctionTraits.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
17 //*****************************************************************************
18 
19 #ifndef polybori_ring_CMemberFunctionTraits_h_
20 #define polybori_ring_CMemberFunctionTraits_h_
21 
22 // include basic definitions
23 #include <polybori/pbori_defs.h>
24 
26 
32 template<class MemberFuncPtr>
34 
36 template <class Type, class ResultType, class ArgType, class ObjRef>
38 public:
39  typedef ResultType result_type;
40  typedef ArgType argument_type;
41  typedef Type object_type;
42  typedef ObjRef object_reference;
43 };
44 
45 
46 template <class Type, class ResultType>
47 class CMemberFunctionTraits<ResultType (Type::*)()>:
48  public CMemberFunctionTraitsBase<Type, ResultType, void, Type&> { };
49 
50 template <class Type, class ResultType>
51 class CMemberFunctionTraits<ResultType (Type::*)() const>:
52  public CMemberFunctionTraitsBase<Type, ResultType, void, const Type&> { };
53 
54 template <class Type, class ResultType, class ArgType>
55 class CMemberFunctionTraits<ResultType (Type::*)(ArgType)>:
56  public CMemberFunctionTraitsBase<Type, ResultType, ArgType, Type&> { };
57 
58 
59 template <class Type, class ResultType, class ArgType>
60 class CMemberFunctionTraits<ResultType (Type::*)(ArgType) const>:
61  public CMemberFunctionTraitsBase<Type, ResultType, ArgType, const Type&> { };
62 
63 
64 template <class MemberFct>
67 
68 public:
69  MemberFunctionOperator(MemberFct func): m_func(func) {}
70 
71  typename traits::result_type operator()(typename traits::object_reference obj,
72  typename traits::argument_type arg) {
73  return (obj .* m_func)(arg);
74  }
75 
76 private:
77  MemberFct m_func;
78 };
79 
80 
81 template <class MemberFct>
82 MemberFunctionOperator<MemberFct>
83 member_function_operator(MemberFct func) {
85 }
86 
88 
89 #endif