1 #ifndef PROTON_FUNCTOR_H
2 #define PROTON_FUNCTOR_H
32 template<
typename>
struct fo_;
36 template<
typename retT,
typename ...argT>
37 struct fo_<retT(argT...)>{
38 virtual retT operator()(argT ...x)=0;
43 template<
typename fpT>
46 template<
typename>
struct _fp_;
48 template<
typename retT,
typename ...argT>
49 struct _fp_<retT(argT...) >: fo_<retT(argT...)>{
50 typedef retT (*fp_t)(argT...);
58 retT operator()(argT ...x)
67 template<
typename fpT>
68 using fp_=ref_<_fp_<fpT> >;
71 template<
typename,
typename>
struct _fm_;
73 template<
typename refT,
typename retT,
typename ...argT>
74 struct _fm_<refT, retT(argT...) >: fo_<retT(argT...)>{
75 typedef typename refT::obj_t obj_t;
76 typedef retT (obj_t::*fp_t)(argT...);
83 _fm_(refT x, fp_t f):_x(x),
_f(f)
86 retT operator()(argT ...a)
88 return ((*_x).*(
_f))(a...);
97 template<
typename refT,
typename fpT>
98 using fm_=ref_<_fm_<refT, fpT> >;
106 #endif // PROTON_FUNCTOR_H