template<>
struct pointer_integer_traits<unsigned int> : public _pointer_integer_traits<unsigned int>
{
template<typename funp>
pointer_integer_traits(funp fun):_pointer_integer_traits<unsigned int>(fun){}
template<typename funp>
pointer_integer_traits(const funp* fun):_pointer_integer_traits<unsigned int>(fun){}
};
//////////////////////////////////////////
// 指针与引用的换
template<typename T>
struct pointer_reference_traits;
template<typename T>
struct pointer_reference_traits<T&>
{
T* _p;
pointer_reference_traits(const T* p)
{
_p = const_cast<T*>(p);
}
operator T&(){return *_p;}
};
template<typename T>
struct pointer_reference_traits<const T&>
{
T* _p;
pointer_reference_traits(const T* p)
{
_p = const_cast<T*>(p);
}
operator const T&(){return *_p;}
};
template<typename T>
struct pointer_reference_traits<T*>
{
T* _p;
pointer_reference_traits(const T& p)
{
_p = const_cast<T*>(&p);
}
operator T*(){return _p;}
};
template<typename T>
struct pointer_reference_traits<const T*>
{
T* _p;
pointer_reference_traits(const T& p)
{
_p = const_cast<T*>(&p);
}
operator const T*(){return _p;}
};
/////////////////////////////////
NAMESPACE_TRAITS_END
#endif
########################
########################
// mfunction_traits.hpp
#ifndef MFUNCTION_TRAITS_INCLUDE
#define MFUNCTION_TRAITS_INCLUDE
#include "traits_config.hpp"
NAMESPACE_TRAITS_BEGIN
template<typename Function> struct mfunction_traits_helper;
template<typename Classtype,typename R>
struct mfunction_traits_helper<R(Classtype::*)()>
{
enum{arity = 0};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg1)>
{
typedef Arg1 arg1;
enum{arity = 1};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg2,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg2,Arg1)>
{
typedef Arg2 arg2;
typedef Arg1 arg1;
enum{arity = 2};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg3,typename Arg2,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg3,Arg2,Arg1)>
{
typedef Arg3 arg3;
typedef Arg2 arg2;
typedef Arg1 arg1;
enum{arity = 3};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg4,typename Arg3,typename Arg2,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg4,Arg3,Arg2,Arg1)>
{
typedef Arg4 arg4;
typedef Arg3 arg3;
typedef Arg2 arg2;
typedef Arg1 arg1;
enum{arity = 4};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg5,typename Arg4,typename Arg3,typename Arg2,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg5,Arg4,Arg3,Arg2,Arg1)>
{
typedef Arg5 arg5;
typedef Arg4 arg4;
typedef Arg3 arg3;
typedef Arg2 arg2;
typedef Arg1 arg1;
enum{arity = 5};
typedef R result_type;
typedef Classtype class_type;
};
template<typename Classtype,typename R,typename Arg6,typename Arg5,typename Arg4,typename Arg3,typename Arg2,typename Arg1>
struct mfunction_traits_helper<R(Classtype::*)(Arg6,Arg5,Arg4,Arg3,Arg2,Arg1)>
{
typedef Arg6 arg6;
typedef Arg5 arg5;
typedef Arg4 arg4;
typedef Arg3 arg3;
typedef Arg2 arg2;
typedef Arg1 arg1;
enum{arity = 6};
typedef R result_type;
typedef Classtype class_type;
};