📄 functorold.h
字号:
typedef typename TypeTraits<P13>::ParameterType Parm13;
typedef typename TypeTraits<P14>::ParameterType Parm14;
typedef typename TypeTraits<P15>::ParameterType Parm15;
virtual NewRType operator()(Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8, Parm9, Parm10, Parm11, Parm12, Parm13, Parm14, Parm15) = 0;
};
};
} // namespace Private
////////////////////////////////////////////////////////////////////////////////
// class template FunctorImpl
// The base class for a hierarchy of functors. The FunctorImpl class is not used
// directly; rather, the Functor class manages and forwards to a pointer to
// FunctorImpl
// You may want to derive your own functors from FunctorImpl.
// Specializations of FunctorImpl for up to 15 parameters follow
////////////////////////////////////////////////////////////////////////////////
template
<
typename R,
class TList,
class ThreadingModel = DEFAULT_THREADING
>
class FunctorImpl
: public Private::FunctorImplHelper
<
TL::Length<TList>::value
>
::template In<R, TList, ThreadingModel>
{
ASSERT_TYPELIST(TList);
public:
virtual ~FunctorImpl() {}
};
////////////////////////////////////////////////////////////////////////////////
namespace Private
{
template <class R>
struct FunCallWrapper
{
template <class ParentFunctor, class Fun>
struct In
{
typedef typename ParentFunctor::Impl Base;
typedef typename Base::Parm1 A0;
typedef typename Base::Parm2 A1;
typedef typename Base::Parm3 A2;
typedef typename Base::Parm4 A3;
typedef typename Base::Parm5 A4;
typedef typename Base::Parm6 A5;
typedef typename Base::Parm7 A6;
typedef typename Base::Parm8 A7;
typedef typename Base::Parm9 A8;
typedef typename Base::Parm10 A9;
typedef typename Base::Parm11 A10;
typedef typename Base::Parm12 A11;
typedef typename Base::Parm13 A12;
typedef typename Base::Parm14 A13;
typedef typename Base::Parm15 A14;
private:
Fun f_;
public:
In(Fun f) : f_(f) {}
R operator() (){return f_();}
R operator()(A0 p0) {return f_(p0);}
R operator()(A0 p0, A1 p1) {return f_(p0, p1);}
R operator()(A0 p0, A1 p1, A2 p2)
{return f_(p0, p1, p2);}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3)
{return f_(p0, p1, p2, p3);}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4)
{return f_(p0, p1, p2, p3, p4);}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5)
{return f_(p0, p1, p2, p3, p4, p5);}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6)
{return f_(p0, p1, p2, p3, p4, p5, p6);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7)
{return f_(p0, p1, p2, p3, p4, p5, p6, p7);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8)
{return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9)
{return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10)
{return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11)
{return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12)
{
return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11,
p12);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12,
A13 p13)
{
return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11,
p12, p13);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12,
A13 p13, A14 p14)
{
return f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11,
p12, p13, p14);
}
};
};
template <>
struct FunCallWrapper<void>
{
template <class ParentFunctor, class Fun>
struct In
{
typedef typename ParentFunctor::Impl Base;
typedef typename Base::Parm1 A0;
typedef typename Base::Parm2 A1;
typedef typename Base::Parm3 A2;
typedef typename Base::Parm4 A3;
typedef typename Base::Parm5 A4;
typedef typename Base::Parm6 A5;
typedef typename Base::Parm7 A6;
typedef typename Base::Parm8 A7;
typedef typename Base::Parm9 A8;
typedef typename Base::Parm10 A9;
typedef typename Base::Parm11 A10;
typedef typename Base::Parm12 A11;
typedef typename Base::Parm13 A12;
typedef typename Base::Parm14 A13;
typedef typename Base::Parm15 A14;
typedef VoidAsType R;
private:
Fun f_;
public:
In(Fun f) : f_(f) {}
R operator() (){f_(); return VoidAsType();}
R operator()(A0 p0) {f_(p0); return VoidAsType();}
R operator()(A0 p0, A1 p1) {f_(p0, p1); return VoidAsType();}
R operator()(A0 p0, A1 p1, A2 p2)
{f_(p0, p1, p2); return VoidAsType();}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3)
{f_(p0, p1, p2, p3); return VoidAsType();}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4)
{f_(p0, p1, p2, p3, p4); return VoidAsType();}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5)
{f_(p0, p1, p2, p3, p4, p5); return VoidAsType();}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6)
{f_(p0, p1, p2, p3, p4, p5, p6); return VoidAsType();}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7)
{f_(p0, p1, p2, p3, p4, p5, p6, p7); return VoidAsType();}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8)
{f_(p0, p1, p2, p3, p4, p5, p6, p7, p8); return VoidAsType();}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9)
{f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); return VoidAsType();}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10)
{
f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
return VoidAsType();
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11)
{
f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
return VoidAsType();
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12)
{
f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
return VoidAsType();
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12,
A13 p13)
{
f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
p13);
return VoidAsType();
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12,
A13 p13, A14 p14)
{
f_(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
p13, p14);
return VoidAsType();
}
};
};
template <class R>
struct MemFunCallWrapper
{
template <class ParentFunctor, class pToObj, class pToMemFun>
struct In
{
typedef typename ParentFunctor::Impl Base;
typedef typename Base::Parm1 A0;
typedef typename Base::Parm2 A1;
typedef typename Base::Parm3 A2;
typedef typename Base::Parm4 A3;
typedef typename Base::Parm5 A4;
typedef typename Base::Parm6 A5;
typedef typename Base::Parm7 A6;
typedef typename Base::Parm8 A7;
typedef typename Base::Parm9 A8;
typedef typename Base::Parm10 A9;
typedef typename Base::Parm11 A10;
typedef typename Base::Parm12 A11;
typedef typename Base::Parm13 A12;
typedef typename Base::Parm14 A13;
typedef typename Base::Parm15 A14;
private:
pToObj pObj_;
pToMemFun pMemFun_;
public:
In(const pToObj& pObj, pToMemFun pMemFun)
: pObj_(pObj)
, pMemFun_(pMemFun)
{}
R operator() (){return ((*pObj_).*pMemFun_)();}
R operator()(A0 p0) {return ((*pObj_).*pMemFun_)(p0);}
R operator()(A0 p0, A1 p1)
{
return ((*pObj_).*pMemFun_)(p0, p1);
}
R operator()(A0 p0, A1 p1, A2 p2)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2);
}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3);
}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4);
}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5);
}
R operator()(A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8, p9);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8, p9, p10);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8, p9, p10, p11);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8, p9, p10, p11, p12);
}
R operator()( A0 p0, A1 p1, A2 p2, A3 p3, A4 p4, A5 p5, A6 p6,
A7 p7, A8 p8, A9 p9, A10 p10, A11 p11, A12 p12,
A13 p13)
{
return ((*pObj_).*pMemFun_)(p0, p1, p2, p3, p4, p5, p6,
p7, p8, p9, p10, p11, p12, p13);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -