X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=libs%2Fgeneric%2Ffunctional.h;h=67161ffdcb12eea617bfe83242842e8f6719a3e0;hp=ecbf6c7d938e285d93169b061a46db4c12fcc755;hb=18d60f90d7603cb420150739251cf98519c57406;hpb=f6b4543bd54926411cb71a776bc5b37eea846c4f diff --git a/libs/generic/functional.h b/libs/generic/functional.h index ecbf6c7d..67161ffd 100644 --- a/libs/generic/functional.h +++ b/libs/generic/functional.h @@ -72,6 +72,23 @@ using get_result_type = typename detail::Fn>::result_type; template using get_argument = typename detail::Fn>::template get; +namespace detail { + template + struct MemberFunction; + + template + struct MemberFunction { + using type = R(Object::*)(Ts...); + using type_const = R(Object::*)(Ts...) const; + }; +} + +template +using MemberFunction = typename detail::MemberFunction::type; + +template +using ConstMemberFunction = typename detail::MemberFunction::type_const; + template class MemberN; @@ -89,6 +106,9 @@ public: }; }; +template func> +using Member = typename MemberN::template instance; + template class ConstMemberN; @@ -106,6 +126,9 @@ public: }; }; +template func> +using ConstMember = typename ConstMemberN::template instance; + template class FunctionN; @@ -123,6 +146,9 @@ public: }; }; +template +using Function = typename FunctionN::template instance; + template class CallerShiftFirst; @@ -184,45 +210,4 @@ public: template using FunctorInvoke = FunctorNInvoke>; -// todo: inline - -template -using Member = typename MemberN::template instance; - -template -using ConstMember = typename ConstMemberN::template instance; - -template -using Member1 = typename MemberN::template instance; - -template -using ConstMember1 = typename ConstMemberN::template instance; - -template -using Member2 = typename MemberN::template instance; - -template -using ConstMember2 = typename ConstMemberN::template instance; - -template -using Member3 = typename MemberN::template instance; - -template -using ConstMember3 = typename ConstMemberN::template instance; - -template -using Function0 = typename FunctionN::template instance; - -template -using Function1 = typename FunctionN::template instance; - -template -using Function2 = typename FunctionN::template instance; - -template -using Function3 = typename FunctionN::template instance; - -template -using Function4 = typename FunctionN::template instance; - #endif