⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functorold.h

📁 loki库的源代码。loki库是以模板技术和面向对象技术为基础的c++类库。
💻 H
📖 第 1 页 / 共 5 页
字号:
           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 + -