x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
function_adaptors.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\lambda\detail\function_adaptors.hpp
旋转
特效
属性
历史版本
// Boost Lambda Library - function_adaptors.hpp ---------------------------- // Copyright (C) 1999, 2000 Jaakko J�rvi (jaakko.jarvi@cs.utu.fi) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see www.boost.org #ifndef BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP #define BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP #include "boost/type_traits/same_traits.hpp" namespace boost { namespace lambda { template
struct function_adaptor { // we do not know the return type off-hand, we must ask it from Func template
class sig { typedef typename Args::head_type F; typedef typename detail::remove_reference_and_cv
::type plainF; public: // To sig we pass a cons list, where the head is the function object type // itself (potentially cv-qualified) // and the tail contains the types of the actual arguments to be passed // to the function object. The arguments can be cv qualified // as well. typedef typename plainF::template sig
::type type; }; template
static RET apply(A1& a1) { return a1(); } template
static RET apply(A1& a1, A2& a2) { return a1(a2); } template
static RET apply(A1& a1, A2& a2, A3& a3) { return a1(a2, a3); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4) { return a1(a2, a3, a4); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) { return a1(a2, a3, a4, a5); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) { return a1(a2, a3, a4, a5, a6); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) { return a1(a2, a3, a4, a5, a6, a7); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) { return a1(a2, a3, a4, a5, a6, a7, a8); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) { return a1(a2, a3, a4, a5, a6, a7, a8, a9); } template
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10) { return a1(a2, a3, a4, a5, a6, a7, a8, a9, a10); } }; template
struct function_adaptor
; // error // -- function adaptors with data member access template
struct function_adaptor
{ // typedef detail::unspecified type; // T can have qualifiers and can be a reference type // We get the return type by adding const, if the object through which // the data member is accessed is const, and finally adding a reference template
class sig { typedef typename boost::tuples::element<1, Args>::type argument_type; typedef typename detail::IF
::value, typename boost::add_const
::type, T >::RET properly_consted_return_type; typedef typename detail::IF< boost::is_volatile
::value, typename boost::add_volatile
::type, properly_consted_return_type >::RET properly_cvd_return_type; public: typedef typename boost::add_reference
::type type; }; template
static RET apply( T Object::*data, Object& o) { return o.*data; } template
static RET apply( T Object::*data, const Object& o) { return o.*data; } template
static RET apply( T Object::*data, volatile Object& o) { return o.*data; } template
static RET apply( T Object::*data, const volatile Object& o) { return o.*data; } template
static RET apply( T Object::*data, Object* o) { return o->*data; } template
static RET apply( T Object::*data, const Object* o) { return o->*data; } template
static RET apply( T Object::*data, volatile Object* o) { return o->*data; } template
static RET apply( T Object::*data, const volatile Object* o) { return o->*data; } }; // -- function adaptors with 1 argument apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)()) { return func(); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)()) { return func(); } }; // -- function adaptors with 2 argument apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)() const, const Object* o) { return (o->*func)(); } template
static Result apply( Result (Object::*func)() const, const Object& o) { return (o.*func)(); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(), Object* o) { return (o->*func)(); } template
static Result apply( Result (Object::*func)(), Object& o) { return (o.*func)(); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1), A1& a1) { return func(a1); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1), A1& a1) { return func(a1); } }; // -- function adaptors with 3 argument apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(Arg1) const, const Object* o, A1& a1) { return (o->*func)(a1); } template
static Result apply( Result (Object::*func)(Arg1) const, const Object& o, A1& a1) { return (o.*func)(a1); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(Arg1), Object* o, A1& a1) { return (o->*func)(a1); } template
static Result apply( Result (Object::*func)(Arg1), Object& o, A1& a1) { return (o.*func)(a1); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) { return func(a1, a2); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) { return func(a1, a2); } }; // -- function adaptors with 4 argument apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object* o, A1& a1, A2& a2) { return (o->*func)(a1, a2); } template
static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object& o, A1& a1, A2& a2) { return (o.*func)(a1, a2); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(Arg1, Arg2), Object* o, A1& a1, A2& a2) { return (o->*func)(a1, a2); } template
static Result apply( Result (Object::*func)(Arg1, Arg2), Object& o, A1& a1, A2& a2) { return (o.*func)(a1, a2); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) { return func(a1, a2, a3); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) { return func(a1, a2, a3); } }; // -- function adaptors with 5 argument apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object* o, A1& a1, A2& a2, A3& a3) { return (o->*func)(a1, a2, a3); } template
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object& o, A1& a1, A2& a2, A3& a3) { return (o.*func)(a1, a2, a3); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) { return func(a1, a2, a3, a4); } }; template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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 apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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 apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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 apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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 apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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 apply template
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
struct function_adaptor
{ template
struct sig { typedef Result type; }; template
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
function_adaptors.hpp
网页地址
文件地址
上一页
6/20
下一页
下载
( 26 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.