PolyBoRi
CMemberFunctionTraits.h
Go to the documentation of this file.
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