PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00017 //***************************************************************************** 00018 00019 // include basic definitions 00020 #include "pbori_defs.h" 00021 00022 #ifndef PBORI_CMemberFunctionTraits_h_ 00023 #define PBORI_CMemberFunctionTraits_h_ 00024 00025 BEGIN_NAMESPACE_PBORI 00026 00032 template<class MemberFuncPtr> 00033 class CMemberFunctionTraits; 00034 00036 template <class Type, class ResultType, class ArgType, class ObjRef> 00037 class CMemberFunctionTraitsBase { 00038 public: 00039 typedef ResultType result_type; 00040 typedef ArgType argument_type; 00041 typedef Type object_type; 00042 typedef ObjRef object_reference; 00043 }; 00044 00045 00046 template <class Type, class ResultType> 00047 class CMemberFunctionTraits<ResultType (Type::*)()>: 00048 public CMemberFunctionTraitsBase<Type, ResultType, void, Type&> { }; 00049 00050 template <class Type, class ResultType> 00051 class CMemberFunctionTraits<ResultType (Type::*)() const>: 00052 public CMemberFunctionTraitsBase<Type, ResultType, void, const Type&> { }; 00053 00054 template <class Type, class ResultType, class ArgType> 00055 class CMemberFunctionTraits<ResultType (Type::*)(ArgType)>: 00056 public CMemberFunctionTraitsBase<Type, ResultType, ArgType, Type&> { }; 00057 00058 00059 template <class Type, class ResultType, class ArgType> 00060 class CMemberFunctionTraits<ResultType (Type::*)(ArgType) const>: 00061 public CMemberFunctionTraitsBase<Type, ResultType, ArgType, const Type&> { }; 00062 00063 00064 END_NAMESPACE_PBORI 00065 00066 #endif