function_adaptors.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 641 行 · 第 1/2 页
HPP
641 行
};// -- function adaptors with 5 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object* o, A1& a1, A2& a2, A3& a3) { return (o->*func)(a1, a2, a3); } template <class RET, class A1, class A2, class A3> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object& o, A1& a1, A2& a2, A3& a3) { return (o.*func)(a1, a2, a3); }};template <class Object, class Arg1, class Arg2, class Arg3, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object* o, A1& a1, A2& a2, A3& a3) { return (o->*func)(a1, a2, a3); } template <class RET, class A1, class A2, class A3> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object& o, A1& a1, A2& a2, A3& a3) { return (o.*func)(a1, a2, a3); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) { return func(a1, a2, a3, a4); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) { return func(a1, a2, a3, a4); }};// -- function adaptors with 6 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4) { return (o->*func)(a1, a2, a3, a4); } template <class RET, class A1, class A2, class A3, class A4> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4) { return (o.*func)(a1, a2, a3, a4); }};template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object* o, A1& a1, A2& a2, A3& a3, A4& a4) { return (o->*func)(a1, a2, a3, a4); } template <class RET, class A1, class A2, class A3, class A4> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object& o, A1& a1, A2& a2, A3& a3, A4& a4) { return (o.*func)(a1, a2, a3, a4); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return func(a1, a2, a3, a4, a5); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return func(a1, a2, a3, a4, a5); }};// -- function adaptors with 7 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return (o->*func)(a1, a2, a3, a4, a5); } template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return (o.*func)(a1, a2, a3, a4, a5); }};template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return (o->*func)(a1, a2, a3, a4, a5); } template <class RET, class A1, class A2, class A3, class A4, class A5> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return (o.*func)(a1, a2, a3, a4, a5); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return func(a1, a2, a3, a4, a5, a6); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return func(a1, a2, a3, a4, a5, a6); }};// -- function adaptors with 8 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return (o->*func)(a1, a2, a3, a4, a5, a6); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return (o.*func)(a1, a2, a3, a4, a5, a6); }};template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return (o->*func)(a1, a2, a3, a4, a5, a6); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return (o.*func)(a1, a2, a3, a4, a5, a6); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return func(a1, a2, a3, a4, a5, a6, a7); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return func(a1, a2, a3, a4, a5, a6, a7); }};// -- function adaptors with 9 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return (o->*func)(a1, a2, a3, a4, a5, a6, a7); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return (o.*func)(a1, a2, a3, a4, a5, a6, a7); }};template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return (o->*func)(a1, a2, a3, a4, a5, a6, a7); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return (o.*func)(a1, a2, a3, a4, a5, a6, a7); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return func(a1, a2, a3, a4, a5, a6, a7, a8); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return func(a1, a2, a3, a4, a5, a6, a7, a8); }};// -- function adaptors with 10 argument applytemplate <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8); }};template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8); } template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) { return func(a1, a2, a3, a4, a5, a6, a7, a8, a9); }};template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> { template<class T> struct sig { typedef Result type; }; template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) { return func(a1, a2, a3, a4, a5, a6, a7, a8, a9); }};} // namespace lambda} // namespace boost#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?